Maison > Java > javaDidacticiel > le corps du texte

Comment corriger l'erreur « BEGIN_OBJECT attendu mais NOM » lors de l'analyse de JSON imbriqué avec GSON sous Android ?

DDD
Libérer: 2024-10-28 10:18:02
original
902 Les gens l'ont consulté

How to Fix the

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>
Copier après la connexion

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>
Copier après la connexion

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
Copier après la connexion

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>
Copier après la connexion

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 :

  • Assurez-vous que votre les classes de modèles (GsonParse et Words) ont des getters et des setters pour tous les champs JSON.
  • Si vous lisez JSON à partir d'un fichier du dossier Assets, assurez-vous d'utiliser InputStreamReader au lieu de JsonReader.
  • Pour prendre en charge les caractères UTF-8, convertissez la chaîne JSON en UTF-8 avant de l'analyser.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!