我有需要遍历的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键不是兄弟