2016-05-10 115 views
1

反序列化JSON怪我需要反序列化JSON這樣:與改造和GSON

{  
    "17": { 
     "entity_id": "17", 
     "attribute_set_id": "4", 
     "type_id": "virtual", 
     }, 
    "18": { 
     "entity_id": "18", 
     "attribute_set_id": "9", 
     "type_id": "virtual" 
     } 
    } 

,但使用改裝和GSON這似乎是不可能的。

OkHttpClient client = new OkHttpClient.Builder() 
       .addInterceptor(new SigningInterceptor(consumer)) 
       .readTimeout(60, TimeUnit.SECONDS) 
       .connectTimeout(60, TimeUnit.SECONDS) 
       .build(); 

     retrofit = new Retrofit.Builder() 
       .baseUrl("http://endpoint/") 
       .client(client) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

那麼,我該如何反序列化這個生物呢?我可以使用什麼類型?

+0

你可以在對象申報與entity_id和其他attr然後你的服務器響應類將只有該對象 –

回答

0

這是地圖,"17"是一個關鍵和

{ "entity_id": "17", "attribute_set_id": "4", "type_id": "virtual", }

是一個對象。

嘗試使用HashMap。

0

您可以創建一個Java類(比如Item),包括成員變量(entity_idattribute_set_idtype_id) - 我創建this Gist,並使用JSONObject做這樣的事情:

JSONObject yourJSON = new JSONObject(jsonString); 
//This will iterate through 17, 18, etc 
Iterator<String> keysIterator = yourJSON .keys(); 
while(keysIterator.hasNext()) { 
    String key = keysIterator.next(); 
    JSONObject actualObj = (JSONObject)yourJSON.get(key); 
    //Here, supposing you had defined Item class, using Gson, you'd do this: 
    Item thisItem = (new Gson()).fromJson(actualObj.toString(), Item.class); 
    //From here you can call thisItem.getEntityId(), etc 
}