我有一个看起来像这样的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 :(得分:9)
由于某些我现在不知道的原因,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
字段。
答案 1 :(得分:0)
或者为此使用Gson lib,您可以使用内置的Java JSONObject来获取内部json对象。然后你可以用内部Json的String做任何你需要的东西(你可以用Gson或任何其他解析器lib解析它)
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);