Gson:有没有办法只用GSON解析特定的内部JSON列表? [英] Gson:Is there a way to parse only specific internal JSON lists using GSON?

查看:189
本文介绍了Gson:有没有办法只用GSON解析特定的内部JSON列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  {response:{status:{....... },数据:[{ 名称 : 爱丽丝, ID: 123},{ 名称: 杰克, ID: 345},......]} 

解析它的类如下所示: - $ /

  public class TheData {
public List< Users>数据;
}

public class Users {
public String name;
公共字符串ID;
}

然后: -

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



那么所有这些都很简单,但json被封装在一个响应标签中。我可以为此创建另一个类并获得此解析,但有没有其他方法可以使用GSON处理此问题。

出于某种原因,我现在不知道, Gson 对象会将您的JSON字符串解析为原语。



使用 JsonParser 来获取 JsonElement 为一个 JsonObject ,您可以从中检索内部response JsonObject

  //在对字符串
进行一些清理之后String str ={\response \ :{\ status\ :{\ id\ :45},\ data\ :[{\ name\ :\ Alice\,\\ \\ id\:123},{\ name\:\ Jack\,\ id\:345}]}};

JsonParser parser = new JsonParser();
JsonObject元素=(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()



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

Gson 对象可以解析内部的 JsonElement 作为 TheData 对象,忽略状态字段。


I have a json which looks like this

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

The classes to parse this looks like below:-

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

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

And then:-

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

Well all this simple but the json is wrapped in a "response" tag. I can create another class for the same and get this parsed but is there any other way I can handle this with GSON.

解决方案

For some reason that I do not know right now, a Gson object parses your JSON string as a primitive.

Instead use a JsonParser to get a JsonElement as a JsonObject from which you can retrieve the inner "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);

With some toString() added, prints

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

The Gson object can parse the inner JsonElement as a TheData object, ignoring the status field.

这篇关于Gson:有没有办法只用GSON解析特定的内部JSON列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆