我正在尝试修改一个JSON(未知结构),其中我知道JsonPath及其等效的XML Xpath。
我已经厌倦了使用window.alert("")
库。
JsonPath的问题是,它返回值但我无法修改目标节点。
以下是我的相同代码段
com.jayway.jsonpath.JsonPath
我尝试使用previously asked quetion中提到的Jackson,但它需要按节点逐个遍历
JsonPath.read(jsonFile, jsonPath);
JsonPath.parse(jsonPath);
System.out.println("Author: "+JsonPath.read(jsonFile, jsonPath));
由于结构未知,我无法做到。
我已经尝试了问题recursively parse JSON object的答案,但它说明了如何解析而不是修改
我需要做以下
((ObjectNode) parent).put(fieldName, newValue);
有什么方法可以实现这一目标吗?
答案 0 :(得分:4)
JsonNode
个对象是不可变的,因此您无法修改它们。你可以做的是用另一个替换JsonNode
。还需要强制转换为ObjectNode
以显示所需的方法。首先找到要替换的节点的父节点:
JsonNode node = root.findParent("JsonPath");
然后使用这两种方法中的任何一种将其替换为新方法:
((ObjectNode) node).remove("JsonPath"); // remove current node
((ObjectNode) node).put("JsonPath", "New Value"); // add new one with new value
或
((ObjectNode) node).replace("JsonPath", new TextNode("New Value"));