8
votes

désérialiser un objet JSON avec plusieurs articles à l'intérieur

J'essaie de désérialiser (utiliser gson) un objet JSON qui ressemble à ceci: xxx

Comment puis-je le gérer? Je ne sais même pas quoi d'appeler ceci - il existe plusieurs "articles" représentés ici, mais ce n'est pas un tableau. Lorsque j'essaie de le désérialiser comme une matrice, le programme se bloque sur un "Begin_Array attendu mais trouvé begin_Object" Exception. Lorsque j'essaie de le désérialiser comme un objet fort (voir classe ci-dessous), le programme fonctionne, mais les champs renvoient tous null.

Voici la classe que j'ai essayé de la cartographier: xxx

Le fichier JSON complet peut être vu Pehere:

Edit: Résolu.

La solution de la perception a essentiellement fonctionné. Il a été compliqué par le fait que cet "élément" (voudrait toujours savoir ce que cet élément JSON multiples / non-Array) est incorporé dans un objet JSON plus grand qui contient une matrice. Encore une fois, ce JSON n'est pas ma conception - il provient de l'API de WordPress Rest, et (@ @Proction allouée à), je pense que le problème que j'ai eu illustre une faille de conception de celui-ci - à savoir que l'élément de pièces jointes doit être un tableau , plutôt qu'un seul objet. Néanmoins,

Néanmoins, si quelqu'un d'autre a besoin de désérialiser le résultat d'une requête pour tous les messages sur un site donné à l'aide de cette API et a également besoin d'un accès aux pièces jointes de chaque poste, voici comment vous le faites. : xxx


0 commentaires

3 Réponses :


2
votes

Créez d'abord JSONARRAY à partir de cette JSONOBJECT., Ensuite, xxx

à l'aide de cette boucle Obtenez les valeurs de chaîne et mettez une carte ou un objet que vous souhaitez et l'ajoutez à une arraylist xxx

Et xxx

alors vous pouvez utiliser ces valeurs.


0 commentaires

9
votes

Ceci est un exemple de données qui probablement devraient em> strong> ont été sérialisés comme une matrice, mais non. Une solution à l'analyse consiste à utiliser un JSONOBJECT code> directement.

final String jsonObj = new JSONObject(json).getJSONObject("attachments");
final Gson gson = new Gson();
final Map<String, Attachment> data = gson.fromJson(jsonObj.toString(),
        new TypeToken<Map<String, Attachment>>() {
        }.getType());
final List<Attachment> attachments = new ArrayList<Attachment>(data.values());


5 commentaires

Je pense qu'il y a un malentendu ici, de ma part ou de ma part. Ce qui est représenté ici ne sont pas des articles, mais des composantes des articles (nommément des pièces jointes) que j'essaie de désérialiser dans des domaines des instances de l'article que vous avez aidées auparavant ..


@ Drewmore4 - En effet. Consultez mon édition (rien de substantiel, remplacer essentiellement article avec pièce jointe ).


C'est ce que j'ai pensé :) J'essaie ce que vous avez suggéré, mais je reçois une erreur d'erreur - ne peut que itérayer un tableau ou une instance de java.lang.itéable - sur la boucle pour la boucle.


@ Drewmore4 - édité. Vous devrez peut-être modifier le code, je n'ai pas accès à un guichet automatique IDE.


Merci. Devait faire un peu de travail supplémentaire, mais votre solution m'a obtenu là-bas. Voir mon édition si vous êtes curieux



0
votes

Comment puis-je le gérer? Je ne sais même pas quoi d'appeler cela - il existe plusieurs "articles" représentés ici, mais ce n'est pas un tableau.

On dirait que la collection dans le JSON est un ajustement naturel pour un java.util.map . Donc, je désérialiserais probablement les "pièces jointes" Json dans une carte mappe . La carte est alors facile à parcourir ou transformer la collecte de valeurs de fixation dans un type de collection différent, comme une liste Liste ou une pièce jointe [] . < / p>

Remarque: Le Guide de l'utilisateur GSON comprend un exemple de désérialisation dans une collection générique.


0 commentaires