Java中的Json转换和空值管理问题
我有一个json字符串,我想使用Jackson在Java中使用以下代码对其进行一些更改:Java中的Json转换和空值管理问题,java,json,jackson,Java,Json,Jackson,我有一个json字符串,我想使用Jackson在Java中使用以下代码对其进行一些更改: public String transformJson(String json) { final ObjectMapper mapper = new ObjectMapper(); Student s = mapper.readValue(json, Student.class)) // Do some changes on the object s return m
public String transformJson(String json) {
final ObjectMapper mapper = new ObjectMapper();
Student s = mapper.readValue(json, Student.class))
// Do some changes on the object s
return mapper.writeValueAsString(s);
}
这是学生班:
@AllArgsConstructor
@Data
@JsonInclude(Include.NON_NULL)
public static class Student {
private String firstName;
private String lastName;
private String country;
private Long age;
}
上面的代码可以工作,我们假设输入中的json如下所示:
{
"firstName" : "Jim",
"lastName" : "Miles"
}
{
"firstName" : "Jim",
"lastName" : "Miles",
"country" : null
}
如果不做任何更改,输出将是相同的。注释@JsonInclude(Include.NON_NULL)只会从输出中删除任何空字段
但是现在新的要求是:当输入json显式地将一个值定义为null时,那么输出应该将该字段显示为null。这意味着当输入为以下内容时:
{
"firstName" : "Jim",
"lastName" : "Miles"
}
{
"firstName" : "Jim",
"lastName" : "Miles",
"country" : null
}
那么输出仍然应该是:
{
"firstName" : "Jim",
"lastName" : "Miles",
"country" : null
}
关于如何实现这一点,你有什么想法吗?你可以尝试将所有字段包装在
AtomicReference
中,但这并不十分优雅。拥有值为null的属性有什么意义?{country:null}
和{}
之间有什么区别?当您需要转换JSON->JSON时,有时您可能会发现根本不使用中间对象表示很有用。例如,请参见:您可以尝试将所有字段包装在AtomicReference
中,但这并不十分优雅。拥有值为null的属性有什么意义?{country:null}
和{}
之间有什么区别?当您需要转换JSON->JSON时,有时您可能会发现根本不使用中间对象表示很有用。例如,见: