【发布时间】:2019-01-20 16:52:51
【问题描述】:
我正在使用 JsonNode (com.fasterxml.jackson.databind.JsonNode) 遍历 json 响应
如何检查给定的 JsonNode 是单个元素还是数组?,因为我需要更深入地遍历它,并更新一些值(例如,名称值)
我可以有这样的 json 响应:(使用单个元素)
{ person: {
name: "name1",
address: "address1"
}
}
或者我可以有这样的 json 响应:(带有 )
{ "person": [
{
"name": "name1",
"address": "address1"
},
{
"name": "name2",
"address": "address2"
}
]
}
对于单个元素,我有以下代码:
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(jsonString);
JsonNode personNode = root.findPath("person");
if(!personRootNode.isMissingNode())
((ObjectNode)nameNode).put("name","UPDATED NAME");
而且,对于一个数组元素,我有这个代码
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(jsonString);
JsonNode personNode = root.findPath("person");
if(!personNode .isMissingNode())
for(JsonNode node: personRootNode){
if(!node.isMissingNode()) {
((ObjectNode)node).put("name","UPDATED NAME");
}
}
我想在一个地方混合逻辑,因为唯一的区别是for循环
我可以将替换逻辑包装在一个函数/方法中。 但是如何判断当前节点是元素还是数组呢?
【问题讨论】:
-
personNode.isArray()这是你要的吗? -
是的,这就是我想要的。非常感谢
-
请阅读文档,即
JsonNode的javadoc,你会发现很多isXxx()方法来确定节点类型。 -
是的,对不起。我认为它更复杂,但幸运的是它很容易。
标签: java json rest spring-boot