【问题标题】:How would I decode this JSON with GSON (multi-d-array)?我将如何使用 GSON(多维数组)解码这个 JSON?
【发布时间】:2012-08-27 20:13:57
【问题描述】:

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

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

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

***edit:我遇到的问题是“524”和“525”字段不是静态名称。它们取决于用户的凭据是什么。可能有字段 323、324、325 或单个字段 123。这完全取决于。我将如何动态处理这个问题?

已解决* 我必须在我的自定义类中将“数据”设为<String, Object> 哈希图。然后在第一次解码之后,我把“数据”变成了一个 Object [] 类型的数组。然后对于每个 Object[i],我将其转换为 JSON 字符串。之后,我使用 gson.fromJson() 将其转换为我最初想要的样子。

【问题讨论】:

    标签: java android json gson


    【解决方案1】:

    如果 API 给出的结果不一致,而您最终找不到这样做的原因,则一种选择是将对象解析为 GSON JSONObject o = gson.fromJson(String),然后将数据转换为列表(如果不是已经通过o.getElement("data").isList() 等..

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

    【讨论】:

    • 当我尝试 JSONObject o = JSONObject.fromJson(String) 时,我得到错误 fromJson(String) is undefined...
    • 谢谢,但我还是不太明白我应该做什么。现在我对其进行了更改,以便将“数据”转换为通用的“对象”类型。所以我做了 Complaints_Return response = gson.fromJson(line, Complaints_Return.class);现在“数据”只是一个对象,但我对它进行解码没有问题。我该去哪里将 response.data 放入一个数组中?我对上面代码的问题是我无法实例化这样的对象;类型根本不匹配。如果你 cud b 具体那会很棒。谢谢!
    • 我是说你应该检查看看它是否是你所期望的类型。如果不是,修改JSONObject,将map转为数组,然后放到POJO中
    【解决方案2】:

    GSON 是正确的。从服务器回复data 是对象,其中两个成员也是对象。要成为数组data 应该有方括号[] 而不是大括号{}。更多关于 JSON 格式here.

    服务器格式已更改或您尝试了另一个 API 版本或有人在服务器端犯了错误。

    【讨论】:

    • 对于其他 API 调用,数据始终以数组或单个对象的形式返回。在这些情况下,我可以使用 @SerializedName 将数组及其变量映射到 Java 对象,因为我总是知道那些特定 API 调用的字段名称。不过,对于这个,“524”和“525”取决于我发送给 API 的请求参数;因此它们不是静态的。那么我将如何动态解码这样的返回呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2021-01-14
    • 2017-07-05
    • 1970-01-01
    相关资源
    最近更新 更多