2016-07-28 7 views
2

Ich habe eine api, die die Daten mit einer Struktur, die ähnlich wie diese gibt:Retrofit 2 Serialisieren JSON Ergebnis mit dynamischen Schlüsseln

{ 
    "1": { 
     "url":"http://www.test.com", 
     "count":2 
    }, 
    "3": { 
     "url":"http://www.test.com", 
     "count":12 
    }, 
    "16": { 
     "url":"http://www.test.com", 
     "count":42 
    } 
} 

Die Namen sind die ID. Es ändert sich von Zeit zu Zeit, also kenne ich die Schlüssel nicht.

Wie kann ich es dann serialisieren?

Antwort

1

Ich denke, Sie müssen einen Konverter (GSON-Konverter oder Jackson-Konverter) verwenden und JSON-Antwort darin mit TypeAdapter analysieren.

private static final Gson GSON = new GsonBuilder() 
      .registerTypeAdapter(ApiEntity.class, new ApiEntityAdapter()) 
      .create(); 

private static final Retrofit RETROFIT = new Retrofit.Builder() 
      ... 
      .addConverterFactory(GsonConverterFactory.create(GSON)) 
      .build(); 

Über TypeAdapter Sie here

lesen kann, aber wenn Sie api Antwort ändern können, wird es besser sein, dass Sie eine Struktur wie diese

[ {"id":1, "url":"http://www.test.com", "count":2}, 
    {"id":3, "url":"http://www.test.com", "count":12}, 
...] 
1

Retrofit bauen kann diese Art von serialise Struktur zu einer Karte.

public final Map<String, MyDataStructure> items; 

In Ihrem Fall die 3 eine Karte Größe produzieren würde die folgenden

"1" -> { "url":"http://www.test.com", "count":2 } 
"3" -> { "url":"http://www.test.com", "count":12 } 
"16" -> { "url":"http://www.test.com", "count":42 } 
enthalten