Java 如何使用Jackson对字段为字符串或对象的JSON进行(反)序列化

Java 如何使用Jackson对字段为字符串或对象的JSON进行(反)序列化,java,json,jackson,Java,Json,Jackson,我有一个从API返回的JSON,所以我不能更改它,问题是其中一个属性有时是空字符串,有时是对象 有时,当我称之为foo时,它是一个空字符串 { "foo" : "", "bar" : 0 } 在其他时候,它是一个物体 { "foo" : {"baz": 11}, "bar" : 2 } 有没有办法用Jackson做到这一点?到目前为止,我找到的唯一方法是编写自定义反序列化器/序列化器对。这种方法的问题是,这是一个嵌套很深的JSON结构,并且有问题的属性靠近根…是的,请配置Objec

我有一个从API返回的JSON,所以我不能更改它,问题是其中一个属性有时是空字符串,有时是对象

有时,当我称之为foo时,它是一个空字符串

{ 
 "foo" : "",
 "bar" : 0
}
在其他时候,它是一个物体

{
 "foo" : {"baz": 11},
 "bar" : 2
}

有没有办法用Jackson做到这一点?到目前为止,我找到的唯一方法是编写自定义反序列化器/序列化器对。这种方法的问题是,这是一个嵌套很深的JSON结构,并且有问题的属性靠近根…

是的,请配置
ObjectMapper
以接受空字符串作为
null
对象

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);

以上内容适用于Jackson 2+。Jackson 1也有类似的配置,但是
configure
有点不同。

是的,将
ObjectMapper
配置为接受空字符串作为
null
对象

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);

以上内容适用于Jackson 2+。Jackson 1也有类似的配置,但是
configure
有点不同。

Thnx是一个很好的答案。对于仍在使用Jackson 1+的用户,解决方案是添加
mapper.configure(Feature.ACCEPT\u EMPTY\u STRING\u AS\u NULL\u OBJECT,true)改为.Thnx以获得一个很好的答案。对于仍在使用Jackson 1+的用户,解决方案是添加
mapper.configure(Feature.ACCEPT\u EMPTY\u STRING\u AS\u NULL\u OBJECT,true)取而代之。