Я просматриваю ответ json с помощью JsonNode (com.fasterxml.jackson.databind.JsonNode)
Как я могу проверить, является ли данный 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
Я могу заключить логику замены в функцию / метод. Но как мне проверить, является ли текущий узел элементом или массивом?
Да, это то, что я искал. Спасибо большое
Пожалуйста, прочтите документацию, то есть javadoc JsonNode, и вы найдете множество методов isXxx() для определения типа узла.
Да, мне очень жаль. Я думал, что это сложнее, но, к счастью, это было легко.




Вы можете вызвать функцию isArray () для объекта JsonNode. Например:
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(s2);
JsonNode personNode = root.findPath("person");
if (personNode.isArray()) {
///array found
} else {
// non-array element
}
Спасибо, это работает. Я думал, что тип узла сложнее определить.
используйте метод ниже. Введите 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.
personNode.isArray()это то, о чем вы просите?