java - 如何从 json 对象序列化为列表或将 json 列表序列化为对象列表?

标签 java json jackson

我有一个 json 数据结构,可以是(忽略所有其他 json):

"warnings": [
    {
        ... some json ...
    },
    {
        ... some json ...
    }
]

或者也可以是

"warnings": {
    ... some json ...
}

jackson 中的以下代码适用于第一种情况:

@JsonProperty("warnings")
private List<Warning> warnings;

但第二次就不行了。使用 jackson 库(如果可能的话加上注释)进行映射的正确做法是什么,以便它将以 json 列表或 json 对象的形式映射 json,但两者都映射到同一字段。从外部系统接收数据时,这似乎是一个相当常见的问题,尽管 Jackson 没有开箱即用地处理它(在我看来,这应该是因为列表和单个对象之间的实际差异很小)。

最佳答案

Jackson 依赖属性或字段的类型来确定如何反序列化某些 JSON。没有任何类型可以同时充当 List<Warning>和一个Warning 。 (嗯,有 Object 但这并没有暗示 Jackson 如何反序列化到特定的目标类型。)

一种选择是将字段设置为类型 Object让 jackson 制作一个LinkedHashMap在一种情况下(单个对象)或 ListLinkedHashMap (对象数组)。或者,您可以为该字段提供自己的解串器并生成 Warning对象或 List<Warning>取决于您找到的 JSON。

另一种方法是使用 ObjectNode而不是 POJO。然后您可以检查 JsonNode 的类型你返回 get(String) ,在遍历时。

无论哪种情况,您都必须不断检查 instanceof List 是否或查看JsonNode#isArray()

关于java - 如何从 json 对象序列化为列表或将 json 列表序列化为对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490300/

相关文章:

java - Spring REST - 从 JSON 输入将实体添加到数据库 - 数据库外键错误

java - 如何通过 Jackson 2 JsonNode 树遍历 JSON?

java - 连接到 Amazon RDS Oracle 实例时如何处理 "Got minus one from a read call"错误

java.sql.SQLSyntaxErrorException : ORA-02289: sequence does not exist while using default Generation Strategy in Hibernate with Oracle

json - VB.NET 是否可以将 JSON 数据导出到 JSON 格式的文件中?

ios - Json解析后取回数据

javascript - 附加 JSON 数组以进行选择

java - 如何@autowire 一些 bean 进入 JsonSerializer?

java - 尝试使用java从webapp在datalake中创建文件

java - 排序不适用于以下方法