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
。我知道keyname(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中迭代,为您找到相关的键,如果找到了,则替换它的值。