Ответ 1
Используя gson, вы можете аннотировать ваше поле _data с помощью @SerializedName
. Параметр (значение) этой аннотации - это имя, которое будет использоваться при сериализации и десериализации объектов. Например, поле Java _ data
представляется как RESPONSE_DATA_NAME
в JSON.
public class PagedResponse<T> {
public PagingLinks _links;
@SerializedName(value="RESPONSE_DATA_NAME")
public List<T> _data;
}
Далее см. doc
Если вы хотите управлять полем json, вам нужно написать собственный де-сериализатор, как показано ниже
public class CustomDeserializer implements JsonDeserializer<PagedResponse> {
@Override
public PagedResponse deserialize(final JsonElement json,
final Type typeOfT, final JsonDeserializationContext context)
throws JsonParseException {
Gson gson = new Gson();
PagedResponse pagedResponse = new PagedResponse<>();
List list = new ArrayList<>();
pagedResponse = gson.fromJson(json, PagedResponse.class);
Type listType = new TypeToken<List>() {}.getType();
Set<Entry<String, JsonElement>> enteries = json.getAsJsonObject().entrySet();
for (Entry<String, JsonElement> entry : enteries) {
JsonElement jsonElement = (JsonElement) entry.getValue();
if (jsonElement.isJsonArray()) {
list.add(gson.fromJson(jsonElement, listType));
}
}
pagedResponse.set_data(list);
return pagedResponse;
}
}
наконец проанализируйте его
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(PagedResponse.class, new CustomDeserializer());
Gson gson = gsonBuilder.create();
gson.fromJson(Your_JSON_STRING_HERE, PagedResponse.class);