2015-05-27 109 views
0

JSON結果爲我從服務器獲取如下:在JSON陣列(GSON)反序列化不同的對象

{ 
    "result": [ 
    { 
     "meta": { 
     "rows": "3" 
     } 
    }, 
    { 
     "items": [ 
     { 
      "id": "1", 
      "name": "Steve", 
      "age": "30" 
     }, 
     { 
      "id": "2", 
      "name": "Mary", 
      "age": "29" 
     }, 
     { 
      "id": "3", 
      "name": "Bill", 
      "age": "58" 
     } 
     ] 
    } 
    ] 
} 

我如何反序列化由GSON在我的Android應用程序(我使用的是改造)?
我無法想象在result因爲不同的對象類型的任何包裝類。
任何幫助,將不勝感激!

+0

我使用改裝反序列化。所以,我創建了一個'Meta'類和'UserList'類與'名單 items'但我就是不能讓他們融入這個怪異的數組。 –

+0

那麼,它是怎麼回事?你解決了這個問題嗎?如果是的話,選擇一個答案並接受它,或者如果你以不同的方式解決問題,請寫下自己的答案。 –

+0

我創建了一個通過JSON的'TypeAdapterFactory'。當API改變時,我大約完成了70%。新的API具有「正常」結構,所以我不需要再進行自定義分析。但是爲了解決這個問題,我打算在空閒時間內完成最後的30%。我會在這裏發佈結果。 –

回答

0

對於很好的例子 Converting JSON to Java

其他方式,您可以將您的JSON轉換爲Java對象

請使用org.json庫http://www.json.org/java/index.html

然後,例如

json = new JSONObject(YOUR_JSON).getJSONObject("result"); 
JSONArray items = data.getJSONArray("items"); 
String name = items.getJSONObject(0).getString("name"); 
0

你可以寫一個類型適配器來處理將(去)序列化到(從)數組的類型。你甚至可以使它成爲通用的,所以它可以使用類型如Pair<A, B>。這裏是非通用類型的例子:https://github.com/cakoose/json-tuple-databinding-examples/blob/master/java/src/GsonEntryCustomizer.java - 它的(de)序列化Entry(從數組)。
免責聲明 - 我沒有寫,也沒有測試的代碼,但它似乎是合法的。

如果你只遇到過這樣的問題一次(就像在你的例子),你可能不會打擾使它通用的,只寫TypeAdapter您對特定的2個不同的類別。讀取代碼非常簡單:

in.beginArray(); 
SomeClass1 info1 = gson.getAdapter(SomeClass1.class).read(in); 
SomeClass2 info2 = gson.getAdapter(SomeClass2.class).read(in); 
in.endArray(); 
return new SomeContainerClass(info1, info2); 

(見https://github.com/cakoose/json-tuple-databinding-examples/blob/master/java/src/GsonEntryCustomizer.java#L52