如何检查JsonNode是否有array - Java, SpringBoot



我有需要遍历的JSON如果JSON中有键为' sibling '的列表则遍历将这些值添加到新列表中并返回如果JSON中没有键为' sibling '的列表则不做任何操作

private List<SiblingsGameDataResponse> extractSiblingList(JsonNode node) {
JsonNode siblings = node.get("siblings");
ArrayNode siblingsArrayNode = objectMapper.createArrayNode();
List<SiblingsGameDataResponse> siblingList = new ArrayList<>();
if (siblings.isArray()) {
siblingsArrayNode = (ArrayNode)siblings;
for (Iterator<JsonNode> i = siblingsArrayNode.iterator(); i.hasNext(); ) {
siblingList.add(new SiblingsGameDataResponse(asString(i.next(), "gameId")));
}
return siblingList;
}
return Collections.emptyList();
}

我的代码是制动部分

if (siblings.isArray()

当我在JSON中没有键' "sibling" '列表时,它会给我NullPOinterException

如果json是

{
"siblings": null
...
}

NullNode对象将返回

如果存在其他json键,但"兄弟"键不在

{  
"name": "someName"
...
}

JsonNode siblings = node.get("siblings");将返回null因为它没有找到任何具有该键的节点。

首先检查这个节点是否存在然后再检查它是否为数组

if (siblings != null && !siblings.isNull() && siblings.isArray()){.....}

siblings.isNull()将检查返回的对象是否为NullNode

另一种方法是在读取兄弟姐妹之前有效地使用hasNonNull(String fieldName)方法。这将确保可以读取非空值,也可以读取非NullNode。

if (node.hasNonNull("siblings")){
JsonNode siblings = node.get("siblings");
if (siblings.isArray()) {
....
}
}

同样根据你的问题,你可能有一个错字

当我在JSON中没有键' "sibling" '列表时,它会给我NullPOinterException

你需要兄弟姐妹s键不是兄弟

最新更新