目前,jackson拒绝了整个json,因为属性值为空。
我想使用com.fasterxml.jackson.*来解析json代码。
正如您在下面的input json中看到的,name属性在某些元素中是空的。
hense迭代json对象将被jackson忽略。
因此,将有2个元素构成输出的一部分。
我使用下面的代码,但没有运气
def readJsonString[T](content: String)(implicit m: Manifest[T]): T = {
val objectMapper = new ObjectMapper(new JsonFactory().enable(Feature.ALLOW_COMMENTS)) with ScalaObjectMapper
objectMapper.registerModule(DefaultScalaModule)
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
objectMapper.configure(DeserializationFeature.WRAP_EXCEPTIONS, false)
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
objectMapper.readValue(content)
}
//我想要用作某个属性具有空值的输入的现有json
[
{
"name": "Invalid",
"ruleType": "validation_1",
"inputs": [ { "Name": "", "country": ["USA"] } ]
},
{
"name": "",
"ruleType": "validation_2",
"inputs": [ { "Name": "Test", "place": ["USA"] } ]
},
{
"name": "Valid",
"ruleType": "validation_1",
"inputs": []
}
{
"name": "Valid",
"ruleType": "validation_2",
"inputs": [ { "Name": "Test", "place": ["USA"] } ]
},
{
"name": "Valid",
"ruleType": "validation_1",
"inputs": [ { "Name": "Test", "place": ["France"] } ]
}
]
//将从上面创建的具有正确名称属性值的新json
[
{
"name": "Valid",
"ruleType": "validation_1",
"inputs": [ { "Name": "Test", "country": ["USA"] } ]
}
{
"name": "Valid",
"ruleType": "validation_1",
"inputs": [ { "Name": "Test", "place": ["France"] } ]
}
]
1条答案
按热度按时间guykilcj1#
下面是一个使用jackson的解决方案:
要将jsonMap到的case类:
在序列化之前包含字段验证的自定义序列化程序:
已更新objectmapper以包含自定义序列化程序:
读取/写入json的方法:
一个小测试:
输出:
有用的参考:https://www.baeldung.com/jackson-serialize-field-custom-criteria