需要更新 Json 节点中的值

Need to update the value in a Json node

我有一些任意 Json,我想用对象替换一些文本字段。文本字段有特定的模式,例如,假设它们以美元符号 $ 开头。我事先不知道键是什么。

我要替换的对象是一个Pojo,可能是一个Map或者List,很容易序列化为Json

例如

{
   "key1" : "some value",
   "key2" : "$replaceMe",
   "key3" : {
       "key4" : "more complex",
       "key5" : "$andMe"
}

所以在替换之后,对象看起来像这样

{
   "key1" : "some value",
   "key2" : {},
   "key3" : {
       "key4" : "more complex",
       "key5" : {}
}

其中 {} 表示替换之前存在的字符串的新对象

我想出了几种遍历树的方法,但是想不出一个好的方法来跟踪要替换的对象以及如何替换它们。

您可以遍历 json 文件的 JsonNode 节点,检查每个父节点的子节点:您可以检查是否有表示基本 JSON 字符串值的子节点使用 JsonNode#isTextual 方法,如果他们的文本以美元符号开头,如下所示:

ObjectMapper mapper = new ObjectMapper();
//with a generic parent jsnode and one child node of it
if (child.isTextual() && child.asText().startsWith("$")) {
    //delete the old text value and create an empty objectnode
    ((ObjectNode)parent).set(fieldName, mapper.createObjectNode());
}

要创建一个空的 ObjectNode 子节点,您可以像我上面那样使用 ObjectMapper#createObjectNode 方法。