Maison > Java > javaDidacticiel > le corps du texte

Pourquoi est-ce que j'obtiens l'erreur \'java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73\' lors de l'analyse des données JSON à l'aide de GSON sous Android ?

Barbara Streisand
Libérer: 2024-11-01 14:07:29
original
976 Les gens l'ont consulté

Why am I getting the

Comment analyser les données JSON à l'aide de GSON sous Android : résolution d'erreur

Lors de l'analyse des données JSON à l'aide de GSON sous Android, vous pouvez rencontrer l'erreur : "java.lang.IllegalStateException : BEGIN_OBJECT attendu mais était NAME à la ligne 1, colonne 73." Cette erreur indique un problème de syntaxe dans les données JSON, en particulier une accolade ouvrante manquante.

Solution possible

Pour résoudre ce problème, assurez-vous que vos données JSON sont correctement formaté et contient à la fois une accolade ouvrante et fermante. Par exemple :

<code class="json">{
    "count": "12",
    "colbreak": 1,
    ...
    "seek": 0
}</code>
Copier après la connexion

Cause commune

Une cause courante de cette erreur est la réception de données JSON stockées dans un fichier ou téléchargées depuis un serveur sous forme de chaîne. . Dans de tels cas, la chaîne peut ne pas être correctement codée ou préfixée, ce qui peut entraîner des erreurs d'analyse.

Modification de classe personnalisée

Dans votre code, vous utilisez Java réflexion pour créer une classe personnalisée, GsonParse, pour représenter la structure de données JSON. Cette approche n'est généralement pas recommandée. Au lieu de cela, créez des méthodes getter et setter explicites pour chaque champ dans GsonParse. De plus, annotez les noms de classe et de champ avec @SerializedName pour qu'ils correspondent aux noms de propriétés JSON.

Voici un exemple :

<code class="java">public class GsonParse {

    @SerializedName("count")
    private String count;

    @SerializedName("colbreak")
    private String colbreak;

    @SerializedName("name")
    private String name;

    @SerializedName("score")
    private String score;

    @SerializedName("Words")
    private List<Words> mWords = new ArrayList<>();

    @SerializedName("seek")
    private String seek;

    // Add getters and setters here...
}</code>
Copier après la connexion

Encodage UTF-8

Assurez-vous que vos données JSON sont correctement encodées au format UTF-8. Lors de la réception de données JSON via HTTP, le serveur doit répondre avec l'en-tête Content-Type approprié (par exemple, 'application/json; charset=utf-8').

Méthode d'analyse améliorée

Voici une version améliorée de votre méthode d'analyse qui utilise un Reader :

<code class="java">public static <T> ArrayList<T> JsonParse(T t, Reader reader) {
    ArrayList<T> lcs = new ArrayList<>();
    try {
        Gson gson = new Gson();
        JsonReader jsonReader = new JsonReader(reader);

        jsonReader.beginObject();
        while (jsonReader.hasNext()) {
            T cse = (T) gson.fromJson(jsonReader, t.getClass());
            lcs.add(cse);
        }
        jsonReader.endObject();
        jsonReader.close();
    } catch (UnsupportedEncodingException | IOException e) {
        e.printStackTrace();
    }
    return (ArrayList<T>) lcs;
}</code>
Copier après la connexion

Utilisation

Pour utiliser cette méthode, créez un Reader à partir de votre source (par exemple, fichier ou réponse HTTP) et transmettez-la à la méthode JsonParse :

<code class="java">InputStream ims = assetManager.open("file.txt");
Reader reader = new InputStreamReader(ims, "UTF-8");

ArrayList<GsonParse> gsonObjects = JsonParse(new GsonParse(), reader);</code>
Copier après la connexion

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
Derniers articles par auteur
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!