在Java中动态修改未知JSON的JsonNode

时间:2016-12-28 10:35:04

标签: jackson jsonpath

我正在尝试修改一个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);

有什么方法可以实现这一目标吗?

1 个答案:

答案 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"));