custom deserializerを書かなければなりません。
まず、あなたが既に持っている2よりもさらに新しいクラスを含める必要があります:
public class Response {
public VkAudioAlbumsResponse response;
}
そしてカスタムデシリアライザ、これと似たような必要があります。
を私はこのような何かをしたいです
private class VkAudioAlbumsResponseDeserializer
implements JsonDeserializer<VkAudioAlbumsResponse> {
@Override
public VkAudioAlbumsResponse deserialize(JsonElement json, Type type,
JsonDeserializationContext context) throws JsonParseException {
JsonArray jArray = (JsonArray) json;
int firstInteger = jArray.get(0); //ignore the 1st int
VkAudioAlbumsResponse vkAudioAlbumsResponse = new VkAudioAlbumsResponse();
for (int i=1; i<jArray.size(); i++) {
JsonObject jObject = (JsonObject) jArray.get(i);
//assuming you have the suitable constructor...
VkAudioAlbum album = new VkAudioAlbum(jObject.get("owner_id").getAsInt(),
jObject.get("album_id").getAsInt(),
jObject.get("title").getAsString());
vkAudioAlbumsResponse.getResponse().add(album);
}
return vkAudioAlbumsResponse;
}
}
その後、あなたはあなたのようなJSONをデシリアライズする必要があります。このAPPRで
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(VkAudioAlbumsResponse.class, new VkAudioAlbumsResponseDeserializer());
Gson gson = gsonBuilder.create();
Response response = gson.fromJson(jsonString, Response.class);
osonは、JSONをResponse
クラスに逆シリアル化しようとすると、JSON応答の名前と一致するそのクラスの属性がresponse
であることが分かります。
はその後、この属性のタイプVkAudioAlbumsResponse
であることを認識し、それはJSONレスポンスの残りの部分を処理している、それを解析するために作成したカスタム・デシリアライザを使用し、VkAudioAlbumsResponse
のオブジェクトを返します。
注:デシリアライザへのコードは非常に簡単ですので、私はあなたがそれを理解するには何の問題もないだろうと思います...さらに情報については、私が作成することを好む場合でも、Gson API Javadoc
グレート答えを見ます)新しいクラスを作るのではなく私的なメソッド; –
@MattiaRuggiero私はその特定の責任を持って別のクラスを好む - 小さなクラスをたくさん持つことは、あなたがそれらをはっきりと整理する限り、常に良いものです... – MikO