我正在使用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()将其转换为我最初想要的内容。
答案 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版本或某人在服务器端犯了错误。