Java重构:从JSON中删除一个元素(使代码不那么冗长)



任务是从JSON文件中删除一个JSON元素:在这种情况下是它的ID元素。我能够得到想要的结果。但是代码看起来非常冗长,可以在不妨碍性能的情况下以更好的方式编写吗。

从根节点提供相同的路径:/词汇表/GlossDiv/GlossList/GlossEntry/ID

{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}

删除元素的代码是:可以观察到,它有两个for循环,我们正在遍历需要删除的元素的父元素,然后删除元素。有没有更好的编写代码的方法?

public static JsonNode removeProperty(JsonNode node, List<String> removedField){
JsonNode modifiedNode = node;
for (String nodeToBeRemoved: removedField){
String[] array = nodeToBeRemoved.split("/");
for (int i =1;i<array.length-1;i++){
String name=array[i];
modifiedNode = modifiedNode.get(name);
}
((ObjectNode)modifiedNode).remove(array[array.length-1]);
}
return node;
}

您可以使用JsonPointer,例如

String path = "/glossary/GlossDiv/GlossList/GlossEntry/ID";
String nodeToRemove = path.substring(path.lastIndexOf('/')+1);
JsonPointer jp = JsonPointer.compile(path.substring(0, path.lastIndexOf('/')));
ObjectNode parent = (ObjectNode)node.at(jp);
parent.remove(nodeToRemove);

JsonPointer也可以被缓存。

最新更新