2011-10-24 115 views
2

我需要以某種方式使用GSON將單個json字符串轉換爲特定類型的多個對象。JSON解析到多個POJO集合

我有一個JSON字符串的格式(見包含2個,但有可能是100S)

{domain : name1, geo: us} {domain : name2, country : uk} 

現在我想上述轉換成我的POJO實例映射到串的每個部分。假設POJO被稱爲網站。然後,我需要將json字符串拆分爲2個Website對象。

我正在考慮使用某種標記器分割json字符串,然後在每個部分上應用一些json邏輯。我假設我必須在應用任何json到pojo轉換之前這樣做?

我似乎找不到辦法做到這一點。請指教。

感謝這麼多

+0

您僅限於gson嗎? –

+1

這不是JSON,原因有兩個:密鑰和字符串需要引用;兩個JSON對象需要放在一個數組中,即'[{...},{...}]' – JeremyP

+0

是的,不幸的是被gson困住了。雖然如果有其他選擇,我總是可以嘗試說服。 – user983022

回答

2

反序列化JSON到Java POJO,嘗試JSON-lib中,http://json-lib.sourceforge.net/。這是一個很好的解決方案。雖然我會使用flexjson進行序列化。

String json = "{bool:true,integer:1,string:\"json\"}"; 
JSONObject jsonObject = JSONObject.fromObject(json); 
BeanA bean = (BeanA) JSONObject.toBean(jsonObject, BeanA.class); 

其中BeanA是你的POJO。

如果你有muliple對象,就像在你的例子顯示,然後進行以下操作

String json = "{'data':[{'name':'Wallace'},{'name':'Grommit'}]}"; 
JSONArray jsonArray = (JSONArray) net.sf.json.JSONSerializer.toJSON(json); 
for (int i = 0; i < jsonArray.size(); i++) { 
    JSONObject jsonObject = (JSONObject) jsonArray.get(i); 
    BeanA bean = (BeanA) JSONObject.toBean(jsonObject, BeanA.class); 
    //do whatever you want with each object 
} 
+0

謝謝@menuflavors。非常感激。 – user983022

+0

感謝你們的解決方案。解決。 – user983022

2

假定你有一類網站是這樣的:

class Website { 
    String domain; 
    String geo; 
} 

首先解決您的字符串是有效的json:

String input = "{\"domain\" : \"name1\", \"geo\": \"us\"} {\"domain\" : \"name2\", \"country\" : \"uk\"}"; 

String json = "[" + input + "]"; 

然後使用標準的gson技術將其轉換爲網站列表:

java.lang.reflect.Type t = new TypeToken<List<Website>>(){}.getType(); 
List<Website> websites = new Gson().fromJson(json, t);