【问题标题】:Gson, TypeToken, getting array of objects from JSON, field values are not setGson,TypeToken,从 JSON 中获取对象数组,未设置字段值
【发布时间】:2015-08-11 10:41:00
【问题描述】:

我正在尝试使用 Gson 及其 TypeToken 类从 JSON 字符串中获取对象数组。

这是我使用的代码:

List<MyItem> items = gson.fromJson(jsonString, new TypeToken<ArrayList<MyItem>>() {
 }.getType());

对象列表已创建,它具有预期数量的 MyItem 对象,但未设置其所有字段值(它们为 null、0、false、默认值)。

为什么没有设置这些字段值?我错过了什么吗?

JSON 字符串本身是正确的,我以其他方式获取这些对象(使用更详细的代码和另一个库)。我只是想写紧凑的代码。

【问题讨论】:

    标签: json gson


    【解决方案1】:

    您可能会混淆各种对象。 如果您的对象类型不对应,则不会调用 setter。

    public class MyObjectA implements Serializable
    {
        private MyObjectB myObjectB;
        // with getter and setter
    }
    
    public class MyObjectB implements Serializable
    {
        private int id;
        // with getter and setter
    }
    

    如果您的服务器返回 List&lt;MyObjectA&gt;,则 json 返回将为:

    [{
        "myObjectB": {
            "id": 6034
        }
    }]
    

    Json array to ArrayList gson,就像你所做的那样:

    Type collectionType = new TypeToken<ArrayList<MyObjectA>>() {}.getType();
    ArrayList<MyObjectA> navigation = gson.fromJson(jsonResponse, collectionType);
    for (MyObjectA myObjectA : navigation) {
        System.out.println(myObjectA.getMyObjectB().getId());
    }
    

    混淆对象类,不警告也不崩溃,但不正确设置对象集合对象。

    【讨论】:

    • 自从我从事那个项目以来已经有一段时间了,所以我现在无法在真实代码上检查它。无论如何,非常感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多