2017-03-09 3 views
0

Dies ist eine in einer Reihe von Deserialisierungsfragen, aber ich habe sie alle gelesen und kann die Lösung für mein Problem nicht herausfinden.Deserialisieren von JSON-Array von Objekten mit GSON

Ich muss alle "Entery" -> "Inhalt" -> $ t und "entery" -> "Titel" -> "$ t" aber in CategoryDeserializer() bekomme ich JsonArray, das ist NULL. Ich habe auf diesen Teil des Codes mit "< ====" hingewiesen.

Fehlermeldung:

Attempt Interface-Methode 'java.util.Iterator java.util.List.iterator()' auf null Objektreferenz

Ich habe JSON aufzurufen, etwa wie folgt aussieht:

{ "feed":{ 
     "id":{ ... }, 
     "author":[ ... ], 
     "entry":[ 
     { 
      "id":{ }, 
      "updated":{ }, 
      "category":[ ], 
      "title":{ 
       "type":"text", 
       "$t":"A1 }, 
      "content":{ 
       "type":"text", 
       "$t":"test" 
      }, 
      "link":[ ] 
     }, 
     { ... }, 
     { ... }, 
     { ...}, 
     ] 
    } 
} 

Dieser Teil meines Codes ist, wo ich versuche, „entery“ deserialisieren:

String json = response.body().toString(); 

Type listType = new TypeToken<List<Entry>>() { 
          }.getType(); 

Gson gson = new GsonBuilder().registerTypeAdapter(listType, new CategoryDeserializer()).create(); 

List<Entry> list = gson.fromJson(json, listType); 

for (Entry entry : list) { 
    Log.i("MainActivity", "Content: " + entry.getContent());} 

Wo CategoryDeserializer() sieht wie folgt aus:

public class CategoryDeserializer implements JsonDeserializer<List<Entry>> { 
public List<Entry> deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException { 

     JsonArray entry = je.getAsJsonObject().getAsJsonArray("entry"); //<==== here I get that entry is null but je has a value 
     ArrayList<Entry> myList = new ArrayList<Entry>(); 

     for (JsonElement e : entry) { 
      myList.add((Entry) jdc.deserialize(e, Entry.class)); 
     } 

    return myList;} 

Und mein Eintrag Klasse:

public class Entry { 

    private Id_ id; 

    private Updated_ updated; 

    private List<Category_> category = null; 

    private Title_ title; 

    private Content content; 

    private List<Link_> link = null; 

    //getters and setters 

    public Id_ getId() { 
     return id; 
    } 

    public void setId(Id_ id) { 
     this.id = id; 
    } 

    public Updated_ getUpdated() { 
     return updated; 
    } 

    public void setUpdated(Updated_ updated) { 
     this.updated = updated; 
    } 

    public List<Category_> getCategory() { 
     return category; 
    } 

    public void setCategory(List<Category_> category) { 
     this.category = category; 
    } 

    public Title_ getTitle() { 
     return title; 
    } 

    public void setTitle(Title_ title) { 
     this.title = title; 
    } 

    public Content getContent() { 
     return content; 
    } 

    public void setContent(Content content) { 
     this.content = content; 
    } 

    public List<Link_> getLink() { 
     return link; 
    } 

    public void setLink(List<Link_> link) { 
     this.link = link; 
    } 

} 

Edit: Ich Deklaration und Instanziierung haben.

+0

Sie diese Frage gesehen haben: http: //stackoverflow.com/questions/2864370/how-do-i-use-googles-gson-api-to-deserialize- Json-richtig – Milaci

+0

Sie können dies verwenden> Antwort Antwort = neue Gson(). fromJson (s.toString(), Entry.class); –

+0

Aber wenn Sie JSON-Daten vollständig anzeigen können, wäre es gut zu helfen. –

Antwort

0

Ich verkomplizierte Dinge, die nicht kompliziert waren. Alles, was ich war zu tun hatte:

String json = response.body().toString(); 
Gson mGson = new Gson(); 

//where Example is the root of JSON 
Example rsp = mGson.fromJson(json, Example.class); 

//Entry is the list I needed to access 
List <Entry> listOfEntrys= rsp.getFeed().getEntry(); 

//get value 
Log.i("MainActivity", "listaEntrya " + listOfEntrys.get(0).getTitle().get$t()); 
Verwandte Themen