Java GSON : Deserializing a field which has different types

标签 java json serialization deserialization gson

我在反序列化 json 时遇到了问题,其中有一个字段可以有多种类型,并且该类型由另一个字段确定。

为了清楚地说明这个问题,请看下面的 3 个示例,json 称为 Extra,它的字段 Unit 始终是字符串,它的字段 Value 可以是小数(示例 1)、对象(示例 2) )或对象列表(示例 3),具体取决于字段单位的值。

我对 GSON 相当陌生,不知道如何解决这个问题,从 API 来看,我似乎必须编写一个自定义反序列化器?我将如何为这个示例编写一个字段的类型取决于另一个字段的示例?

Example 1
Extra {
Unit:"Decimal"
Value:0.0
}

Example 2
Extra {
Unit:"Object"
Value:{object}
}

Example 3
Extra {
Unit:"List of objects"
Value:[{object}
{object},
{object},
]
}

最佳答案

尝试如下所示的操作: 拿一个 bean 例如:ExampleBean 在ExampleBean中获取另一个值列表的属性,例如:列表值;

然后尝试将 GSON 转换为 List,如下所示

    public static List getListFromGsonString(String jsonString){
        Gson gson = new Gson();
        Type listType = new TypeToken() {}.getType();
        List list = (List)gson.fromJson(jsonString, listType);
        return list;
    }
    

这就是我们在项目中所做的。如果不适用则忽略。

关于Java GSON : Deserializing a field which has different types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571410/

相关文章:

java - 如何在java中替换json文件的值

java - 如何使用 BorderLayout 排列组件?

.net - JSON序列化时如何本地化?

.NET 4.5 中的序列化异常

java - 无法反序列化],根本原因是 java.io.EOFException : null

java - 有没有办法了解 Spark 如何加载类路径以及加载顺序?

java - WEB应用中的缓存线程池性能

javascript - JQuery JSON 调用 PHP WebService 总是运行 "Error"回调

json - 使用 jq/bash 将父元素添加到 json 对象

javascript - 如何使用 jquery 隐藏特定的 json 对象数据