需要更新 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
方法。
我有一些任意 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
方法。