gpt4 book ai didi

java - Jackson 将空白字符串转换为 null

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:11 25 4
gpt4 key购买 nike

我有像这样的 JSON 字符串

{"firstName":"ABC", "middleName":"", "lastName":"XYX"}

我正在将此字符串转换为 JsonNode

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonString, new TypeReference<JsonNode>() {});

它工作完美,但我想将 middleName 值从 "" 转换为 null,这样 JsonNode 应该像

{"firstName":"ABC", "middleName":null, "lastName":"XYX"}

我添加了一个序列化器

    ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(String.class, new StdSerializer<String>(String.class) {

@Override
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonGenerationException {
if("".equalsIgnoreCase(value)){
jgen.writeNull();
}else{
jgen.writeString(value);
}

}
});

mapper.registerModule(module);
mapper.readValue(jsonString, new TypeReference<JsonNode>() {});

但它返回与 JsonNode 相同的字符串。我实际上缺少什么?

最佳答案

对于其他对象,Jackson 将为您提供 null,但对于字符串,它将提供空字符串。

但是您可以使用自定义 JsonDeserializer 来执行此操作:

class CustomDeserializer extends JsonDeserializer<String> {

@Override
public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
JsonNode node = jsonParser.readValueAsTree();
if (node.asText().isEmpty()) {
return null;
}
return node.toString();
}

}

关于java - Jackson 将空白字符串转换为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37928962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com