我需要在Java中更改JSON属性的值,我可以正确地获得该值,但我无法修改JSON。
下面是代码
JsonNode blablas = mapper.readTree(parser).get("blablas");
for (JsonNode jsonNode : blablas) {
String elementId = jsonNode.get("element").asText();
String value = jsonNode.get("value").asText();
if (StringUtils.equalsIgnoreCase(elementId, "blabla")) {
if(value != null && value.equals("YES")){
// I need to change the node to NO then save it into the JSON
}
}
}
最好的方法是什么?
7条答案
按热度按时间3z6pesqy1#
JsonNode
是不可变的,用于解析操作。但是,它可以转换为允许变化的ObjectNode
(和ArrayNode
):对于数组,您可以用途:
smdnsysy2#
添加一个答案,因为其他一些人在已接受答案的注解中进行了向上投票,他们在尝试强制转换为ObjectNode时会遇到此异常(包括我自己):
解决方案是获取“父”节点,并执行
put
,从而有效地替换整个节点,而不管原始节点类型如何。如果需要使用节点的现有值“修改”节点:
get
返回JsonNode
的值/数组1.对该值/数组执行修改
1.继续在父级上调用
put
。代码,其中目标是修改
subfield
,它是NodeA
和Node1
的子节点:我从here得到了这个灵感,这要感谢wassgreen@
zfycwa2u3#
我认为您可以只强制转换为ObjectNode并使用
put
方法。ObjectNode o = (ObjectNode) jsonNode; o.put("value", "NO");
个bvhaajcl4#
“Sharon-Ben-Asher”的答案是可以的。
但在我的例子中,对于数组,我必须用途:
tnkciper5#
你需要获取
ObjectNode
类型的对象来设置值。9q78igpj6#
只是为了理解其他人谁可能没有得到整个图片清楚以下代码工程为我找到一个字段,然后更新它
yfwxisqw7#