2016-05-31 2 views
2

Ich benutze Retrofit, um Rest-API-Anrufe zu behandeln. Ich habe einen Rest-API, die die folgenden jsonRetrofit zu Parser Json mit einer unbestimmten Anzahl von Objektnamen

"MyObject": { 
     "43508": { 
     "field1": 4339, 
     "field2": "val", 
     "field3": 15, 
     "field4": 586.78 
     }, 
     "1010030": { 
     "field1": 1339, 
     "field2": "val212", 
     "field3": 1, 
     "field4": 86.78 
     },... 
    } 

Bitte beachten Sie, dass das Objekt MyObject enthält Objekte mit einem Namen zurückgibt, die tatsächlich eine ID ist. Für alle anderen Rest-APIs benutze ich Retrofit ohne Probleme. In diesem Fall scheint es nicht möglich, den Standardansatz zu verwenden: Definieren einer Klasse mit den Feldern, die in der Antwort erwartet werden.

Gibt es eine Möglichkeit, diese json in ein json ein Array mit dem

zu verwandeln
{ 
    "field1": xxx, 
    "field2": "yyy", 
    "field3": www, 
    "field4": zzz 
} 

Oder gibt es einen besseren Weg, mit diesem Problem fertig zu werden, ohne „von Hand“ zu gehen zurück, um die json Parsen?

Antwort

0

Try nächsten Ansatz zu verwenden:

public class Response { 

    Map<String, YourObject> MyObject; 
    // getter, setter 
} 

public interface GitHubService { 
    @GET("some_path") 
    Call<Response> listMyObjects(); 
} 

Alle werden Sie Objekte auf der Karte analysiert werden. Sie können die Liste aller IDs über die Methode keySet() abrufen oder alle Einträge mit entrySet() auflisten.

0

Versuchen Sie, die Annotation SerializedName (nameOfField) über den Variablennamen zu setzen.

@SerializedName("13445345") 
MyObject object; 
+2

das Problem ist, dass es eine große Anzahl von möglichen IDs gibt. Ich kann den SerializedName nicht so einstellen – user6405527

0

Nun meine Idee ist ziemlich manuell, aber es sollte funktionieren. Ich werde die Antwort einer anderen Person hier nicht kopieren und einfügen, also schauen Sie sich this answer an, um zu sehen, wie man alle myObject Schlüssel durchläuft. Fügen Sie dann für jeden dieser Schlüssel ein neues JSONArray hinzu und fügen Sie das Schlüsselwertpaar fieldX-valueX hinzu.

Dies ist nur eine Grundidee, da ich denke, dass Sie mit dem Code selbst umgehen können, Sie scheinen wie ein Typ, der sich durch die einfachen Sachen auskennt.