我正在通过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循环
我可以将替换逻辑包装在函数/方法中。 但是如何检查当前节点是元素还是数组?
答案 0 :(得分:1)
您可以在JsonNode对象上调用isArray()函数。例如:
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(s2);
JsonNode personNode = root.findPath("person");
if(personNode.isArray()) {
///array found
} else {
// non-array element
}
答案 1 :(得分:0)
使用以下方法。输入JSONObject进行检查并输入节点名称。(用于org.json.JSONObject)
private void checkNodeStatus(JSONObject jsonObject, String node) {
if (jsonObject.optJSONArray(node) != null) {
} else if (jsonObject.optString(node) != null) {
JSONArray array = new JSONArray();
array.put(jsonObject.getJSONObject(node));
jsonObject = jsonObject.put(node, array);
} else {
System.out.println("error in checkNodeStatus > node : " + node);
}
}
如果它是一个JSONObject,它将转换为JSONArray。