【发布时间】:2023-04-09 17:39:02
【问题描述】:
给定 json:
{
"name" : {}
}
我想使用 com.fasterxml.jackson 将其解析为以下 Java 对象:
class MyClass {
private String name;
}
如果你尝试一下,你会得到:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
有什么方法可以配置 jackson 反序列化器(最好在全局范围内)它可以将这些 empty objects 处理为 nulls 而无需更改属性类型(来自字符串)?
【问题讨论】:
-
你的 json 不应该是 { "name" : null } ?我们不在 json 中用 {} 表示空对象。 stackoverflow.com/questions/21120999/representing-null-in-json
-
Here 他们提到它不支持解析空对象。该线程的一个想法是在解析之前仅在 JSON 字符串上使用
replace("{}", "null"),这不漂亮,但可能会起作用。 -
应该是,但是那个 JSON 不是我的。而且据我了解,
{}依然有效,对吧? -
嗯,您应该始终能够使用自定义反序列化器将空对象转换为字符串。但是,对空值和非空值使用不同的类型是灾难性的,最好按照其他人的建议使用
"name":null- 或者可能是"name":""。必须检查类型最终肯定会咬你一口。 -
对的人,我知道
name: {}forString不好。但正如我所说,我不会产生这种凌乱的 JSON :-)。
标签: java json jackson fasterxml