2013-10-06 62 views
0

我有一個JSON它看起來像這樣Gson:有沒有辦法只使用GSON解析特定的內部JSON列表?

{response:{"status":{"....."},data:[{"name":"Alice","id":"123"},{"name":"Jack","id":"345"},......]} 

的類來解析,這看起來象下面這樣: -

public class TheData{ 
    public List<Users> data; 
} 

public class Users{ 
    public String name; 
    public String id; 
} 

然後: -

TheData theData=gson.fromJson(jsonresponse,TheData.class) 

那麼這一切簡單而json被封裝在一個「響應」標籤中。我可以爲此創建另一個類並獲得這個解析,但有沒有其他方法可以使用GSON處理此問題。

+0

所以,你只希望從JSON拉出「數據」部分(然後你可以用GSON或任何其他解析器LIB解析它) ? – Origineil

+0

是@JavaDeveloper – Rasmus

回答

5

由於某些原因,我現在不知道,Gson對象會將您的JSON字符串解析爲原語。

改用JsonParser獲得JsonElement作爲JsonObject從中可以檢索內"response"JsonObject

// after some cleanup of the string 
String str = "{\"response\":{\"status\":{\"id\":45},\"data\":[{\"name\":\"Alice\",\"id\":123},{\"name\":\"Jack\",\"id\":345}]}}"; 

JsonParser parser = new JsonParser(); 
JsonObject element = (JsonObject)parser.parse(str); 

JsonElement responseWrapper = element.get("response"); 

Gson gson = new Gson(); 
TheData data = gson.fromJson(responseWrapper, TheData.class); 
System.out.println(data); 

對於某些toString()加入,印刷品

[[name = Alice, id = 123], [name = Jack, id = 345]] 

Gson對象可以解析內JsonElement作爲TheData對象,忽略status字段。

+0

完美!我希望有一些方法可以做到這一點..但這是完美的..謝謝! – Rasmus

+0

@alice JsonParser是Gson庫的一部分。你總是可以調查爲什麼'Gson'對象將它解析爲一個原語並解決它。 –

+0

哦,是的!對不起我的壞...猜猜我只是有一個糟糕的一天!謝謝! – Rasmus

0

爲了得到內部的json對象,可以使用內置的Java JSONObject來替代使用Gson lib。然後,你可以做任何你需要與內部的JSON字符串

 String jsonStr = "{\"response\":{\"status\":{\"id\":45},\"data\":[{\"name\":\"Alice\",\"id\":123},{\"name\":\"Jack\",\"id\":345}]}}"; 

     JSONObject jsonObj = null; 
     try{ 
       jsonObj = new JSONObject(jsonStr).getJSONObject("response"); 
     }catch(JSONException e){ 
       e.printStackTrace(); 
     } 

     if(jsonObj != null) jsonStr = String.valueOf(jsonObj);