jackson - Java中动态修改未知JSON的JsonNode

标签 jackson jsonpath

我正在尝试修改一个 JSON(结构未知),其中 JsonPath 及其等效的 XML Xpath 是我已知的。

我已经厌倦了使用 com.jayway.jsonpath.JsonPath 库来实现同样的目的。 JsonPath 的问题是,它返回值,但我无法修改目标节点。

下面是我的代码片段

JsonPath.read(jsonFile, jsonPath);
JsonPath.parse(jsonPath);
System.out.println("Author: "+JsonPath.read(jsonFile, jsonPath));

我尝试使用 jackson ,如 previously asked quetion 中提到的,但是需要逐个节点遍历,如下

((ObjectNode) parent).put(fieldName, newValue);

由于结构未知,我无法做到这一点。

我已经尝试过问题 recursively parse JSON object 的答案但它说如何解析而不是修改

我需要执行以下操作

JsonNode root = mapper.readTree("Json in form of String");
((JsonNode)(root.get("JsonPath")).set("New Value");

有什么办法可以实现这一点吗?

最佳答案

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

关于jackson - Java中动态修改未知JSON的JsonNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41360172/

相关文章:

java - java中使用jackson注解反序列化字符串和对象

java - 包装结构的JSON与扁平化结构的pojo之间的转换

json - 如何验证 JSON 中是否存在 JSON 路径

xml - 从 JSON 字符串中读取数组元素的 XPath

java - 如何使用 Jayway JsonPath 等 Java 库添加新的 json 节点

javascript - 在 Postman 中导入外部库

java - @Deprecated SerializationFeature.WRITE_EMPTY_JSON_ARRAYS 的替代品

java - 如何使用 Jackson 解析可能是字符串也可能是数组的字段

android - 如何在 android 中使用 Jackson 解析 json 响应?

java - 使用java提取引号括起来的特定值