0

我有以下Json

{
   "messages":[
      {
         "message":{
            "body":"Foo",
            "username":"XYZ"
         }
      },
      {
         "message":{
            "body":"HI",
            "username":"ABC"
         }
      }
   ],
   "response":{
      "status":200
   },
   "more":true
}

我构建自定义类我的容器类结果包含一个列表对象一个响应对象,其中包含一个状态和一个布尔值。

public class Message { 

  @SerializedName("body") 
  public String body; 

  @SerializedName("username") 
  public String username; 

  @Override public String toString() { 
    return "Message{" + "body=" + body + ", username=" + username + '}'; 
  } 
}

public class Response { 
  public int status; 
} 

public class SearchResponseST { 
  @SerializedName("messages") 
  public Message[] messages; 
  public Response response; 
  public boolean more;
}

在我的主要课程中,我会:

SearchResponseST response = 
   gson.fromJson(reader, SearchResponseST.class); Message[] results = response.messages; 

如果我消除“消息”:并直接启动数组,我可以使用 Gson 成功反序列化。

我应该如何用当前结构解析它?

4

2 回答 2

0

对于这样的 JSON

 {
       "messages":
        [
          {"body": "Foo", "username": "XYZ"   },
          {"body": "HI",  "username": "ABC"  }

        ],
        "response": {"status": 200 },
        "more": true
    }

尝试设计的容器对象

Container { List<Message> messages;Response response;boolean more;}

但是对于您发布的 JSON,容器对象应该是

Container { public HashMap[] messages;  public boolean more;    public Response response; }
于 2012-06-01T17:09:18.570 回答
0

虽然这不能直接回答你的问题,因为我不使用 Gson。我一直使用 org.json.simple 包来解析 JSSON。您可以在这里阅读:http ://www.mkyong.com/java/json-simple-example-read-and-write-json/ 只需将 JSON 放入解析器,然后获取您想要的数据。访问数据就像访问 HashMap(对于 JSONObject)或 ArrayList(对于 JSONArray)一样。

编辑解析代码:

    JSONParser parser = new JSONParser();
    JSONObject obj = (JSONObject) parser.parse(new FileReader("file.txt"));
    JSONArray array = (JSONArray) obj.get("messages");
    for (Object o : array) {
      JSONObject jo =(JSONObject)o;
      JSONObject messageObject = (JSONObject)jo.get("message");
      System.out.println(messageObject.get("body"));
      System.out.println(messageObject.get("username"));
    }
于 2012-06-01T17:05:19.150 回答