如何使用GSON(多d阵列)解码此JSON?

时间:2012-08-27 20:13:58

标签: java android json gson

我正在使用GSON解码从我们的服务器返回的JSON字符串。我没有遇到任何问题,直到我从API遇到这个特定的JSON返回。返回采用以下格式:

“成功”:1,“错误”:[],“数据”:{“524”:{“id”:“524”},“525”:{“id”:“525” }}

对于其他返回,我将数据作为我自己创建的类的数组,但对于此返回,它表示它是一个对象而不是数组。那我应该如何格式化我的课程?

***编辑:我遇到的麻烦是'524'和'525'字段不是静态名称。它们取决于用户的凭据。可能有字段323,324,325或单个字段123.这完全取决于。我怎么能动态处理这个?

解决* 我所要做的是在我的自定义类中将'data'作为<String, Object> hashmap。然后在第一次解码后,我将'data'转换为Object []类型的数组。然后,对于每个Object [i],我将其转换为JSON字符串。之后,我使用gson.fromJson()将其转换为我最初想要的内容。

2 个答案:

答案 0 :(得分:3)

如果API给出了不一致的结果,并且您无法找到原因,为什么会这样做,一个选项是将对象解析为GSON JSONObject o = gson.fromJson(String),然后将数据转换为列表如果它不是一个已经做过o.getElement("data").isList()等等。

完成后,您可以通过gson.fromJson(JSONObject,Class)创建对象。另一种方法是有两个类,每个实例一个,但如果这是拥有两个不同类的唯一原因,这似乎很草率。

答案 1 :(得分:1)

GSON是对的。来自服务器回复data是具有两个成员对象的对象。数组data应该使用方括号[]而不是大括号{}。有关JSON格式的更多信息here

服务器格式已更改,或者您尝试了其他API版本或某人在服务器端犯了错误。