Analyse JSON avec GSON sous Android
Comment simplifier l'analyse JSON avec GSON sous Android ? Explorons un problème courant lors de l'utilisation de GSON et explorons une solution étape par étape.
Énoncé du problème :
Lorsque vous utilisez GSON pour analyser une chaîne JSON, vous peut rencontrer une erreur "BEGIN_OBJECT attendu mais était NAME". Cela se produit généralement lorsque vous tentez d'analyser un objet JSON imbriqué dans un tableau.
Exemple JSON :
Considérez les données JSON suivantes :
<code class="json">{ "count": "12", "colbreak": 1, "name": "unary rels", "score": "9090", "Words": [ { "count": 6, "word": "prp_għaċ-", "name": "prp_għaċ-", "score": 9.1, "Words": "kol", "seek": 2231297 } ], "seek": 0 }</code>
Code :
Votre code utilisant GSON pour l'analyse :
<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) { // ... while (reader.hasNext()) { T cse = (T) gson.fromJson(reader, t.getClass()); lcs.add(cse); } // ... }</code>
Erreur :
Exécuter ceci Le code peut entraîner une erreur du type :
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73
Solution :
Pour résoudre cette erreur, vous devez modifier la façon dont vous lisez la valeur JSON. Au lieu de parcourir toute la chaîne JSON, vous devez passer à l'objet spécifique que vous souhaitez analyser, puis le décoder.
Méthode révisée :
Voici une version corrigée de la méthode JsonParse :
<code class="java">public static <T> ArrayList<T> JsonParse(T t, String response) { // ... while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("Words")) { reader.beginArray(); while (reader.hasNext()) { T cse = (T) gson.fromJson(reader, t.getClass()); lcs.add(cse); } reader.endArray(); } else { reader.skipValue(); } } // ... }</code>
Explication :
Dans cette méthode révisée, le code vérifie si le nom JSON actuel est "Words" et si c'est le cas, commence lire le tableau. Il parcourt ensuite chaque objet du tableau, les analyse à l'aide de GSON et les ajoute à la liste. Pour tout autre nom JSON, tel que « count » ou « score », la méthode les ignore simplement.
Considérations supplémentaires :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!