325 votes

GSON jeter « Devrait BEGIN_OBJECT mais a été BEGIN_ARRAY » ?

Je suis en train d’analyser une chaîne JSON comme celui-ci

dans une liste d’objets.

Voici une classe d’objets que j’utilise.

Mais, il me jette avec

Toutes les idées Comment devrais je résoudre ce problème ?

Merci !

EDIT : Merci pour vos réponses. Obtenu il fonctionne de cette façon.

371voto

Brian Roach Points 43787

Le problème est que vous dites Gson vous avez un objet de votre type. Vous n'avez pas. Vous avez un tableau d'objets de type. Vous ne pouvez pas juste essayer et lancer le résultat comme ça et espérer qu'il fonctionne par magie ;)

Le guide de l'Utilisateur pour Gson Explique comment répondre à cela:

https://sites.google.com/site/gson/gson-user-guide

Cela va fonctionner:

channelSearchEnum[] enums = gson.fromJson(yourJson, channelSearchEnum[].class);

Mais c'est mieux:

Type collectionType = new TypeToken<Collection<channelSearchEnum>>(){}.getType();
Collection<channelSearchEnum> enums = gson.fromJson(json, collectionType);

52voto

Guillaume Polet Points 31933

Le problème est que vous demandez pour un objet de type , mais ce que vous avez fait est un objet de type .

Vous pouvez y parvenir avec :

15voto

AZone Points 2153

Solution de rechange pourrait être

pour faire votre réponse ressembler à

myCustom_JSONResponse

Au lieu de

server_JSONResponse

CODE

Après cela, il sera n’importe quelle autre``

8voto

njzk2 Points 17085

selon le guide de l’utilisateur GSON, vous ne pouvez pas.

Limitations de collections

Peut sérialiser la collection d’objets arbitraires mais ne peut pas désérialiser d’elle. Parce qu’il est impossible pour l’utilisateur d’indiquer le type de l’objet résultant

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X