2016-04-20 2 views
2

Ich möchte diesen JSON durch Retrofit analysieren (ich kenne keine Feldnamen {xxx, yyy, zzz}) Ich habe versucht, einige Karten, aber ich habe etwas falsch gemacht. Bitte helfen Sie mir diese verdammte json analysierenWie parsen Sie Json mit unbekannten Schlüssel durch Retrofit?

{ 
     xxx: [ 
     { 
     name: "name1", 
     description: "desc1" 
     } 
     ], 
     yyy: [ 
     { 
     name: "name2", 
     description: "desc2" 
     } 
     ], 
     zzz: [ 
     { 
     name: "name3", 
     description: "desc3" 
     }, 
{ 
     name: "name4", 
     description: "desc4" 
     } 
     ] 
     } 

--- Lösung ---

Ich versuchte Klasse Antwort-schaffen, aber es falsch

public class DishesCategoryResponse { 
    public Map<String, List<Dish>> settingsMap; 
} 

Dann habe ich versucht, diese und es funktioniert

@GET("/api/restaurant_menu/{id}") 
    Observable<Map<String, List<Dish>>> getDishesCategory(@Path("id") long id); 

Antwort

0

Eines Tages hatte ich eine ähnliche Aufgabe. Ist nicht sicher, ob meine Lösung perfekt ist, aber es kann Ihnen helfen.

ich diese JSON-Datei hatte:

Json screenshot

final JSONObject bodyObject = new JSONObject(body); 
final JSONObject activities = bodyObject.getJSONObject("activities"); 
final Iterator<String> keys = activities.keys(); // you can iterate through all keys 

final List<ContactActivity> contactActivityInfoList = new ArrayList<ContactActivity>(); 

while (keys.hasNext()) { 
    final String key = keys.next(); 

    final String jsonString = activities.getJSONObject(key).toString(); 
    final ContactActivity contactActivity = 
       mGson.fromJson(jsonString, ContactActivity.class); 

    contactActivityInfoList.add(contactActivity); 
} 
+0

nicht relevant in der Kontext der Nachrüstung – njzk2

+0

@ njzk2 warum? Get String response und reparse es –

+0

@ njzk2 Gleiches ist für benutzerdefinierte Deserializer mit JsonArray.java aus Gson-Paket verfügbar. Sie können es nicht gut ohne Custom Deserializer verwalten, denke ich, machen Sie einfach die Karte und durchlaufen Sie die Schlüssel –

-2

Mit einem Tool wie GsonFormat (Android studio plugin), das ist die Klasse, die Ihre json Karten:

public class YourClassName { 

/** 
* name : name1 
* description : desc1 
*/ 

private List<XxxEntity> xxx; 
/** 
* name : name2 
* description : desc2 
*/ 

private List<YyyEntity> yyy; 
/** 
* name : name3 
* description : desc3 
*/ 

private List<ZzzEntity> zzz; 

public void setXxx(List<XxxEntity> xxx) { 
    this.xxx = xxx; 
} 

public void setYyy(List<YyyEntity> yyy) { 
    this.yyy = yyy; 
} 

public void setZzz(List<ZzzEntity> zzz) { 
    this.zzz = zzz; 
} 

public List<XxxEntity> getXxx() { 
    return xxx; 
} 

public List<YyyEntity> getYyy() { 
    return yyy; 
} 

public List<ZzzEntity> getZzz() { 
    return zzz; 
} 

public static class XxxEntity { 
    private String name; 
    private String description; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getDescription() { 
     return description; 
    } 
} 

public static class YyyEntity { 
    private String name; 
    private String description; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getDescription() { 
     return description; 
    } 
} 

public static class ZzzEntity { 
    private String name; 
    private String description; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getDescription() { 
     return description; 
    } 
} 
} 
+0

danke für plugin, aber in diesem fall, xxx, yyy, zzz ist dinamic werte, und diese lösung nicht helfen – MrKosherno

+0

Das OP sagt in der frage "ich weiß nicht feldnamen" – njzk2

+0

ich interpretierte "ich don ' Ich kenne Feldnamen {xxx, yyy, zzz} "wie" einige feste Werte, die ich nicht kenne ". – 1911z