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

时间:2013-10-06 01:28:08

标签: java json 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处理这个问题。

2 个答案:

答案 0 :(得分:9)

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

而是使用JsonParserJsonElement作为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);