1

我有一个看起来像这样的 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 处理这个问题。

4

2 回答 2

9

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

而是使用 aJsonParser来获取 aJsonElement作为 a 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内部解析JsonElementTheData对象,忽略status字段。

于 2013-10-06T01:56:18.160 回答
0

或者为此使用 Gson lib,您可以使用内置的 Java JSONObject 来获取内部 json 对象。然后您可以使用内部 Json 的字符串做任何您需要的事情(然后您可以使用 Gson 或任何其他解析器库对其进行解析)

       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);
于 2018-02-06T10:58:37.830 回答