JSON-Parsing mit GSON in Android
Wie können Sie das JSON-Parsing mit GSON in Android vereinfachen? Lassen Sie uns ein häufiges Problem bei der Verwendung von GSON untersuchen und uns Schritt für Schritt mit der Lösung befassen.
Problemstellung:
Wenn Sie GSON zum Parsen einer JSON-Zeichenfolge verwenden, müssen Sie Möglicherweise tritt der Fehler „Erwartetes BEGIN_OBJECT, war aber NAME“ auf. Dies tritt normalerweise auf, wenn Sie versuchen, ein JSON-Objekt zu analysieren, das in einem Array verschachtelt ist.
JSON-Beispiel:
Berücksichtigen Sie die folgenden JSON-Daten:
<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:
Ihr Code, der GSON zum Parsen verwendet:
<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>
Fehler:
Dies wird ausgeführt Code kann zu einem Fehler wie dem folgenden führen:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NAME at line 1 column 73
Lösung:
Um diesen Fehler zu beheben, müssen Sie die Art und Weise ändern, wie Sie den JSON-Wert lesen. Anstatt die gesamte JSON-Zeichenfolge zu durchlaufen, sollten Sie zu dem spezifischen Objekt springen, das Sie analysieren möchten, und es dann dekodieren.
Überarbeitete Methode:
Hier ist eine korrigierte Version der JsonParse-Methode:
<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>
Erklärung:
In dieser überarbeiteten Methode prüft der Code, ob der aktuelle JSON-Name „Words“ ist und wenn ja, beginnt er Lesen des Arrays. Anschließend durchläuft es jedes Objekt im Array, analysiert es mithilfe von GSON und fügt es der Liste hinzu. Bei allen anderen JSON-Namen wie „count“ oder „score“ überspringt die Methode diese einfach.
Zusätzliche Überlegungen:
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Erwartetes BEGIN_OBJECT, war aber NAME' beim Parsen von verschachteltem JSON mit GSON in Android?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!