Java 删除包含特定单词的jsonnode
我使用Java中的Jackson lib生成了以下Json:Java 删除包含特定单词的jsonnode,java,fasterxml,jackson2,jackson-databind,Java,Fasterxml,Jackson2,Jackson Databind,我使用Java中的Jackson lib生成了以下Json: { "name": "name1", "version": "0.0.1", "storage": { "db": { "test_field1": "STRING", "t_dlm1": "STRING", "test_field2": "STRING", "t_dlm2": "STRING"
{
"name": "name1",
"version": "0.0.1",
"storage": {
"db": {
"test_field1": "STRING",
"t_dlm1": "STRING",
"test_field2": "STRING",
"t_dlm2": "STRING"
},
"test": {
"test11": "STRING",
"test2": {
"test3": "0",
"r_dlm4": "0"
},
"test5": {
"test6": "0",
"h_dlm7": "0"
}
},
"test8": {
"test9": "STRING",
"f_dlm10": "STRING"
}
}
}
现在我需要删除那些包含“dlm”字的json节点或字段(键和值)。
我尝试了remove和removeAll方法,使用该方法我可以删除特定字段,但需要传递字段的全名
我在这里有点新,请指导我在这里如何删除json节点,如果字段名包含“dlm”字
预期的json:
{
"name": "name1",
"version": "0.0.1",
"storage": {
"db": {
"test_field1": "STRING",
"test_field2": "STRING"
},
"test": {
"test11": "STRING",
"test2": {
"test3": "0"
},
"test5": {
"test6": "0"
}
},
"test8": {
"test9": "STRING"
}
}
}
我认为您需要在所有节点上循环检查包含“dlm”的密钥 您可以使用jayway的
选项获取所有路径的列表。作为\u PATH\u list
,然后循环这些路径并删除任何包含的dlm
Configuration conf = Configuration.builder()
.options(Option.AS_PATH_LIST).build();
DocumentContext parsedJson = JsonPath.using(conf).parse(json);
List<String> pathList = parsedJson.read("$..*");
for (String path : pathList) {
if (path.contains("dlm")) {
parsedJson.delete(path);
}
}
String result = parsedJson.jsonString();
Configuration conf = Configuration.builder()
.jsonProvider(new JacksonJsonProvider())
.mappingProvider(new JacksonMappingProvider())
.options(Option.AS_PATH_LIST)
.build();