2016-07-19 38 views
1

Ich habe json Antwort, wo ich das Array & Objekte mit dem gleichen Namen haben. Ich konnte es nicht mit GSON analysieren. Ist es unmöglich, diese Art von JSON-Antwort mit Gson zu analysieren? oder gibt es eine Möglichkeit, die Antwort mit GSON zu analysieren?JSON Parsing mit GSON mit dem gleichen Namen in Objekten und Arrays

Beispiel für die Antwort:

{ 
     "content": [ 
        { 
        "type": "text", 
         "content": "adnan", 
         "class": "32", 
         "align": "1" 
        }, 
        { 
        "type": "image", 
        "image": "http://adnanul.jpg", 
        "width": 590, 
        "content": "sarkar", 
        "height": 332, 
        "link": "http://hashtagfail.com/post/44606137082/mobile-services-android-serialization-gson", 
        "caption": "3", 
        "class": "332" 
        } 
       ] 
      } 
+0

wie kannst du das tun? –

+0

Fügen Sie die Ausnahme hinzu, aber es sollte keine Probleme bei der Verwendung dieses JSON mit GSON geben. –

+0

Drup Desai hat bereits eine nette Antwort geschrieben, aber es wäre interessant, Ihren Parsing-Code zu sehen. –

Antwort

1

Der Fehler -

Exception is: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 26643 path $.data[1].content[27].content 

Das Problem ist, dass, Content-Feld innerhalb Inhaltsfeld ist ein Array kein String, dass nicht in Ihrem Codebeispiel gezeigt wird, aber es ist das, was die Ausnahme bedeutet. Es könnte sein, dass Inhalt in einigen Fällen ein String und in einigen Fällen ein Array ist.

Hier ist ein ähnliches Problem und eine Antwort - Gson - Same field name, different types

0

Ja, es ist möglich, diese Reaktion zu archivieren.

public class ContentEntity { 

     private ArrayList<Content> content; 

     public class Content { 
      private String type; 
      private String image; 
      private int width; 
      private int height; 
      private String content; 
      private String link; 
      private String caption; 
      @SerializedName("class") 
      private String className; 

// Add getter and setter here 
     } 
    } 

versuchen Sie unter Entity während der Analyse mit GSON.

+0

das funktioniert nicht, I habe ähnlich versucht –

+0

welche Ausnahme bekommen Sie. –

+0

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete eine Zeichenfolge, aber war BEGIN_ARRAY in Zeile 1 Spalte 26643 Pfad $ .data [1] .content [27] .content –

0

Die Standarddarstellung wird dies wahrscheinlich verursachen, weil Sie Schlüssel mit demselben Namen haben. Vielleicht hilft es, einen eigenen Deserializer zu schreiben.

Lets asume, dass Sie eine Java-Klassennamen „Inhalt“ haben und die json-String stellt ein Array dieses Objekts:

GsonBuilder gsonBuilder = new GsonBuilder(); 
gsonBuilder.registerTypeAdapter(Content.class, new MyBrandNewContentDeserializer()); 

Gson gson = gsonBuilder.create(); 
Content[] conts = gson.fromJson(jsonInput, Content.class); 

Innerhalb der Deserializer Sie auf der String-Typ „Inhalt“ reagieren kann

0

Versuchen Sie, http://www.jsonschema2pojo.org/ zu verwenden. Geben Sie einfach Ihren json ein, wählen Sie JSON als Quellentyp und dann Gson als Annotation Style. Es wird eine POJO Klasse erzeugen