2016-04-27 5 views
2

Ich verwende Retrofit, um einen API-Anruf zu tätigen. Das Top-Level-Objekt wird in Abhängigkeit von den Abfrageparametern der Anfrage benannt. Zum Beispiel wird eine Anforderung wie folgt aus:Nachrüstung, JSON-Objekt auf oberster Ebene ändert den Namen

api.somewebsite.com/1.0/mix_info?mix_id=69

gibt eine Antwort wie folgt aus:

{"69":{ 
    "mix_id":"69", 
    "mix_title":"A Title", 
    "mix_file":"https:example.com/mp3", 
    "mix_genres":"House,Pop", 
    "mix_dj_id":"57", 
    "number_votes":"390", 
    "station":"1" 
    } 
} 

Heres sowie ein screenie dass irgendwie zeigt das Format: http://prnt.sc/axltcd

Grundsätzlich je auf die Zahl in die URL übergeben mix_id= Abfrage wird der Name der obersten Ebene Json-Objekt in der Antwort zurückgegeben.

ich war in der Lage, etwas zu hacken zusammen, die irgendwie funktioniert:

ich ein Modell Response-Klasse haben, die eine Membervariable hat, dass die Top-Level-Objekt ist, und ich verwende Retrofit des @SerializedName („69“) zu explicity setze den Namen. Dies funktioniert natürlich nur für eine Anfrage mit der ID 69, ansonsten gibt die Antwort ein Null-Objekt zurück.

Es sieht wie folgt aus:

public class Response { 

    @SerializedName("69") 
    private _69 _69; 
} 

Wie dem auch sei, ich bin nach einer Möglichkeit, richtig diese seltsam formatierte Antworten zu behandeln. Wie würde das gemacht werden?

+1

Was ist mit Serialisierung einer HashMap? – plalx

+0

..was davon – Orbit

+1

Gut 'hashMap.put ('yourKey', yourData); serialisieren (hashMap) ' – plalx

Antwort

0

Sie können Ihre Antwort als JsonElemen erhalten, in JsonObject konvertieren und Element nach globaler Variable abrufen, die Sie für die Sendeanforderung verwendet haben.

Antwort:

public void onResponse(Call<JsonElement> call, Response<JsonElement> response) { 
     JsonElement jsonElement = response.body(); 
     JsonObject jObj= jsonElement.getAsJsonObject(); 
     JsonObject number= jObj.get(CONSTANT_WHICH_YOU_USED_FOR_REQEST).getAsJsonObject(); 
} 

Fühlen Sie sich frei mich wenn überhaupt zu fragen.