我正在尝试修改一个 JSON(结构未知),其中 JsonPath 及其等效的 XML Xpath 是我已知的。
我已经厌倦了使用com.jayway.jsonpath.JsonPath
图书馆。JsonPath 的问题是,它返回值但我无法修改目标节点。
以下是我的代码片段
JsonPath.read(jsonFile, jsonPath);
JsonPath.parse(jsonPath);
System.out.println("Author: "+JsonPath.read(jsonFile, jsonPath));
Run Code Online (Sandbox Code Playgroud)
我尝试使用之前问过的问题中提到的杰克逊,但它需要按如下方式逐个节点遍历
((ObjectNode) parent).put(fieldName, newValue);
Run Code Online (Sandbox Code Playgroud)
由于未知的结构,我无法做到这一点。
我已经尝试了递归解析 JSON 对象问题的答案,但它说明了如何解析而不是修改
我需要做以下事情
JsonNode root = mapper.readTree("Json in form of String");
((JsonNode)(root.get("JsonPath")).set("New Value");
Run Code Online (Sandbox Code Playgroud)
有什么方法可以实现吗?
JsonNode
对象是不可变的,所以你不能修改它们。你可以做的是JsonNode
用另一个替换一个。到铸件ObjectNode
还需要揭露所需的方法。首先找到要替换的节点的父节点:
JsonNode node = root.findParent("JsonPath");
Run Code Online (Sandbox Code Playgroud)
然后使用这两种方法之一将其替换为新的:
((ObjectNode) node).remove("JsonPath"); // remove current node
((ObjectNode) node).put("JsonPath", "New Value"); // add new one with new value
Run Code Online (Sandbox Code Playgroud)
或者
((ObjectNode) node).replace("JsonPath", new TextNode("New Value"));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5250 次 |
最近记录: |