Java 如何在jsonNode或ObjectNode中替换json节点

Java 如何在jsonNode或ObjectNode中替换json节点,java,json,jackson,fasterxml,jsonnode,Java,Json,Jackson,Fasterxml,Jsonnode,我有一个JSON节点,如下所示。JsonNode的结构将动态变化 现在,我想替换/更新特定键的值 示例JSON One { "company": "xyz", "employee": { "name": "abc", "address": { "zipcode": "021566" } }

我有一个
JSON
节点,如下所示。
JsonNode
的结构将动态变化

现在,我想替换/更新特定键的值

示例JSON One

{
  "company": "xyz",
  "employee": {
    "name": "abc",
    "address": {
      "zipcode": "021566"
    }
  }
}
示例JSON二

{
  "name": "abc",
  "address": {
    "zipcode": "021566"
  }
}
我想将邮政编码值
021566
替换为
566258
。我知道key
name(zipcode)
、新旧邮政编码值,但我不知道邮政编码的路径。我尝试了多种方法使用
com.fasterxml.jackson.databind.JsonNode-put,replace


java中是否有更新的方法?

JsonNodes是不可变的,但您可以从JsonNode中找到所需的值,将原始值转换为ObjectNode,替换该值,然后将其转换回JsonNode。我知道这有点奇怪,但对我来说很有效

public static void findAndReplaceJsonNode抛出JsonProcessingException{
字符串jsonOne=“{\'公司\':\'xyz\”,\'地址\:{\'zipcode\:\'021566\”,\'状态\':\'FL\“}}”;
字符串jsonTwo=“{\'公司\':\'abc\”,\'地址\':{\'zipcode\:\'566258\”,\'状态\':\'FL\“}}”;
ObjectMapper mapper=新的ObjectMapper();
JsonNode nodeOne=mapper.readTree(jsonOne);
JsonNode nodeTwo=mapper.readTree(jsonTwo);
JsonNode findNode=nodeTwo.get(“地址”);
ObjectNode objNode=(ObjectNode)nodeOne;
objNode.replace(“地址”,findNode);
nodeOne=(JsonNode)objNode;
系统输出打印项次(nodeOne);
}
输出:

{"company":"xyz","address":{"zipcode":"566258","state":"FL"}}
免责声明:虽然我定期进行一些JSON解析和处理,但我肯定不会说我擅长于JSON解析和JSON树遍历。在JsonNode中查找子节点值的方法很可能比将整个子节点作为一个节点,替换它的一个值,然后替换节点更好。不过,这在紧要关头应该可以为您工作:)

您需要编写一个(递归)代码,在JsonNode中迭代,为您找到相关的键,如果找到了,则替换它的值。