英文:
Is there a way to put a value to Jackson JsonNode like you get it with jsonNode.at("/deep/path/to/var")?
问题
有类似以下的东西吗?
jsonNode.put("/deep/path/to/var", "myval")
或者使用ObjectNode类似的东西?
我知道有方法可以迭代jsonNode并将内容放入其中,但我的问题是,我如何将"/deep/path/to/..."用作字符串来修改JSON中的值,或者在映射或类似的东西中修改值?
例如,我现在有以下内容:
{
"deep": {
"path": {
"to": "value"
}
}
}
现在我想将其更改为:
{
"deep": {
"path": {
"to": "otherValue"
}
}
}
我希望只需编写一个路径到键并更改值,而无需遍历整个树。
我不想要做的是:
myMap.get("deep").get("path").put("to", "otherValue");
我喜欢的是类似这样的东西:
mySuperfancyObject.put("deep/path/to", "otherValue");
这种可能吗?
英文:
Is there something like
jsonNode.put("/deep/path/to/var", "myval")
or something with ObjectNode?
I know there are ways to iterate over the jsonNode and put something inside but my Question is. How could I use "/deep/path/to/..." as String to modify a value in a JSOn or also inside a map or something similar?
For example what I have is
{"deep":{
"path": {
"to":"value"
}
}
And now I want to change it to
{"deep":{
"path": {
"to":"otherValue"
}
}
My wish is that I just write a path to the key and change the value without iterating through the tree.
What I don't like to do is:
myMap.get("deep").get("path").put("to","otherValue");
What I like is something fancy like:
mySuperfancyObject.put("deep/path/to", "otherValue");
Is this possible?
答案1
得分: 0
啊,好的,现在我明白如何使用
jsonNode.at("/deep/path");
这个函数会返回一个 JsonNode,你可以在将其转换为 ObjectNode 时对其进行操作。如果你这样做,整个树都会得到更新。
所以我的代码看起来像:
JsonNode jsonNode = new ObjectMapper().valueToTree(myMap);
JsonNode nodeToSetValue = jsonNode.at("/deep/path");
String oldValue = ((ObjectNode) nodeToSetValue).get("finalKey").asText();
String newValue = changeValue(oldValue);
((ObjectNode) nodeToSetValue).put("finalKey", newValue);
myMap = new ObjectMapper().convertValue(jsonNode, new TypeReference<Map<String, Object>>(){});
<details>
<summary>英文:</summary>
Ah ok now I understand how to do it with
jsonNode.at("/deep/path");
This function returns a JsonNode and you could manipulate it when you cast it to an ObjectNode. If you do that the whole tree get this update.
So my code looks like:
JsonNode jsonNode = new ObjectMapper().valueToTree(myMap);
JsonNode nodeToSetValue = jsonNode.at("/deep/path");
String oldValue = ((ObjectNode) nodeToSetValue).get("finalKey").asText();
String newValue = changeValue(oldValue);
((ObjectNode) nodeToSetValue).put("finalKey", newValue);
myMap = new ObjectMapper().convertValue(jsonNode, new TypeReference<Map<String, Object>>(){}));
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论