gpt4 book ai didi

java - 删除包含特定单词的 jsonnode

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:55 25 4
gpt4 key购买 nike

我在 Java 中使用 Jackson 库生成了以下 Json:

{
"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 方法,这样我就可以删除特定字段,但需要传递字段的完整确切名称。

我在这里有点新,如果字段名称包含“dlm”字,请在这里指导我如何删除 json 节点

预期的 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”的 key 。

您可以使用 jayway 的 JsonPath使用 Option.AS_PATH_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();

我怀疑您可以使用合适的路径通过 dlm 选择所有元素。您可以应用过滤器并使用正则表达式,尽管我看不到如何在过滤器中使用元素名称(即 xpath 中的/name() 之类的东西)。

注意:如果您有带有“dlm”的嵌套节点,上述代码可能会在尝试删除内部节点之前删除外部节点,因此您可能会遇到找不到路径的异常。

JsonPath 引入 json-smart 作为依赖项并默认使用它。如果你想让它使用 jackson,你必须告诉它。例如:

    Configuration conf = Configuration.builder()
.jsonProvider(new JacksonJsonProvider())
.mappingProvider(new JacksonMappingProvider())
.options(Option.AS_PATH_LIST)
.build();

关于java - 删除包含特定单词的 jsonnode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53823553/

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