Java 重构:从 JSON 中删除一个元素(使代码不那么冗长)
Java Refactoring: To remove a element from JSON (making the code less verbose)
要求从 JSON 文件中删除 JSON 元素:在本例中是它的 ID 元素。我能够得到想要的结果。但是代码看起来很冗长,能不能在不影响性能的情况下写得更好
相同的路径是从根节点提供的:
/glossary/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
也可以缓存
要求从 JSON 文件中删除 JSON 元素:在本例中是它的 ID 元素。我能够得到想要的结果。但是代码看起来很冗长,能不能在不影响性能的情况下写得更好
相同的路径是从根节点提供的: /glossary/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
也可以缓存