JSON personnalisé deserializer à l'aide de Gson
J'ai un problème avec l'analyse d'une réponse JSON à l'aide de Gson.
Chaîne JSON:
response: [
2, {
owner_id: 23972237,
album_id: 25487692,
title: 'album not new'
}, {
owner_id: 23972237,
album_id: 25486631,
title: 'фыв'
}
]
J'ai ces 2 classes:
public class VkAudioAlbumsResponse {
public ArrayList<VkAudioAlbum> response;
public VkError error;
}
public class VkAudioAlbum {
public int owner_id;
public int album_id;
public String title;
}
Mais j'ai une Exception lors de l'analyser à l'aide de cette Gson.
Je sais que c'est parce que la réponse de la matrice de premier élément n'est pas un objet, mais entier.
La question est donc, puis-je le résoudre en quelque sorte?
OriginalL'auteur niks.stack | 2013-05-16
Vous devez vous connecter pour publier un commentaire.
Vous devez écrire un personnalisé deserializer. J'aimerais faire quelque chose comme ceci:
D'abord, vous devez inclure une nouvelle classe, plus loin que les 2 que vous avez déjà:
Et puis vous avez besoin d'un custom deserializer, quelque chose de semblable à ceci:
Ensuite, vous avez à désérialiser votre JSON comme:
Avec cette approche, lorsque Gson tente de désérialiser le JSON dans
Response
classe, il trouve qu'il y a un attributresponse
dans la classe qui correspond au nom de la réponse JSON, alors qu'il continue de l'analyse.Puis elle se rend compte que cet attribut est de type
VkAudioAlbumsResponse
, de sorte qu'il utilise la coutume deserializer vous avez créé à l'analyser, le processus dans lequel la portion restante de la réponse JSON, et retourne un objet deVkAudioAlbumsResponse
.Remarque: le code dans Le deserializer est assez simple, donc je suppose que vous n'aurez aucun problème à le comprendre... Pour plus d'info voir Gson API Javadoc
Je préfère de beaucoup une classe distincte avec cette responsabilité - d'avoir beaucoup de petites classes est toujours bon de l'omi, aussi longtemps que vous les organiser clairement...
OriginalL'auteur MikO