我有一个 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
在一种情况下(单个对象)或 List
的LinkedHashMap
(对象数组)。或者,您可以为该字段提供自己的解串器并生成 Warning
对象或 List<Warning>
取决于您找到的 JSON。
另一种方法是使用 ObjectNode
而不是 POJO。然后您可以检查 JsonNode
的类型你返回 get(String)
,在遍历时。
无论哪种情况,您都必须不断检查 instanceof List
是否或查看JsonNode#isArray()
。
关于java - 如何从 json 对象序列化为列表或将 json 列表序列化为对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490300/