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也可以缓存