Gson:有没有办法使用GSON解析特定的内部JSON列表?

Ras*_*mus 1 java json gson

我有一个看起来像这样的json

{response:{"status":{"....."},data:[{"name":"Alice","id":"123"},{"name":"Jack","id":"345"},......]}
Run Code Online (Sandbox Code Playgroud)

解析它的类如下所示: -

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

public class Users{
     public String name;
     public String id;
}
Run Code Online (Sandbox Code Playgroud)

然后:-

TheData theData=gson.fromJson(jsonresponse,TheData.class)
Run Code Online (Sandbox Code Playgroud)

好吧这一切都很简单,但json包含在"响应"标签中.我可以为同一个创建另一个类并解析它,但是有任何其他方法我可以用GSON处理它.

Sot*_*lis 9

由于某些我现在不知道的原因,Gson对象将您的JSON字符串解析为基元.

相反,使用JsonParser获得JsonElementJsonObject,从中可以检索内"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);
Run Code Online (Sandbox Code Playgroud)

随着一些toString()添加,打印

[[name = Alice, id = 123], [name = Jack, id = 345]]
Run Code Online (Sandbox Code Playgroud)

所述Gson对象可以解析内JsonElement作为TheData对象,忽略status字段.