如何使用GSON解析这个JSON(多维数组)?

3
我正在使用GSON解码从我们的服务器返回的JSON字符串。我没有遇到任何问题,直到我遇到了这个特定的API返回的JSON。返回值的格式如下:“success”:1,“errors”:[],“data”:{“524”:{“id”:“524”},“525”:{“id”:“525”}}}。对于其他返回,我的数据是我自己创建的类的数组,但是对于此返回,它说它是一个对象而不是一个数组。那么我应该如何格式化我的类?
编辑:我遇到麻烦的是“524”和“525”字段不是静态名称。它们取决于用户的凭据。可能会有字段323、324、325或单个字段123。这完全取决于情况。我如何动态处理这个?
已解决:我所做的就是在我的自定义类中将“data”制作成<String, Object>哈希映射。然后,在第一次解码之后,我将“data”转换为类型为Object []的数组。然后,对于每个Object [i],我将其转换为JSON字符串。之后,我使用gson.fromJson()将其转换为我最初打算的内容。
2个回答

3
如果API提供的结果不一致,并且您无法找出原因,那么一种选择是将对象解析为GSON JSONObject o = gson.fromJson(String),然后通过执行o.getElement("data").isList()等操作将数据转换为列表(如果它还不是一个列表)。
完成后,您可以通过gson.fromJson(JSONObject,Class)创建对象。另一种选择是拥有两个类,每个实例都有一个类,但是如果这是拥有两个不同类的唯一原因,那么这似乎并不妥当。

当我尝试使用 JSONObject o = JSONObject.fromJson(String) 时,我收到了“fromJson(String)未定义”的错误提示。 - user1467225
它在http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html类中,抱歉。 - dfb
谢谢,但我仍然不太明白我应该做什么。现在我已经将“data”转换为通用的“object”类型。所以我做了以下操作:Complaints_Return response = gson.fromJson(line, Complaints_Return.class); 现在,“data”只是一个对象,但我没有解码它的问题。我应该去哪里将response.data转换成某种数组?我对你上面的代码有问题,我无法像那样实例化对象;类型根本不匹配。如果您能具体说明,那就太好了。谢谢! - user1467225
我是说你应该检查一下它是否是你所期望的类型。如果不是,修改JSONObject将map转换为数组,然后将其放入POJO中。 - dfb

1

GSON是正确的。从服务器回复中,data是一个包含两个成员的对象,这两个成员也是对象。如果要将data转换为数组,则应该使用方括号[]而不是花括号{}。有关JSON格式的更多信息,请参见此处

服务器格式已更改,或者您尝试了另一个API版本,或者服务器端出现了错误。


对于其他 API 调用,数据始终作为数组或单个对象返回。在这些情况下,我可以使用 @SerializedName 将数组及其变量映射到 Java 对象,因为我总是知道这些特定 API 调用的字段名称。但是对于这个 API 调用,'524' 和 '525' 取决于我发送到 API 的请求参数;因此它们不是静态的。那么我该如何动态解码这样的返回值呢? - user1467225

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接