You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java SpringBoot中判断JsonNode是否含指定数组及空指针异常解决

问题根因

当JSON中不存在siblings键时,Jackson的JsonNode.get("siblings")会返回null,你未做非空校验直接调用isArray()方法,就会触发NullPointerException。

修复后代码
private List<SiblingsGameDataResponse> extractSiblingList(JsonNode node) {
    List<SiblingsGameDataResponse> siblingList = new ArrayList<>();
    // 先校验存在非空的siblings字段且为数组类型
    if (node.hasNonNull("siblings") && node.get("siblings").isArray()) {
        ArrayNode siblingsArrayNode = (ArrayNode) node.get("siblings");
        for (JsonNode item : siblingsArrayNode) {
            siblingList.add(new SiblingsGameDataResponse(asString(item, "gameId")));
        }
        return siblingList;
    }
    return Collections.emptyList();
}

如果使用的Jackson版本低于2.5,不支持hasNonNull方法,可以替换为如下校验逻辑:

private List<SiblingsGameDataResponse> extractSiblingList(JsonNode node) {
    List<SiblingsGameDataResponse> siblingList = new ArrayList<>();
    JsonNode siblings = node.get("siblings");
    if (siblings != null && siblings.isArray()) {
        ArrayNode siblingsArrayNode = (ArrayNode) siblings;
        for (JsonNode item : siblingsArrayNode) {
            siblingList.add(new SiblingsGameDataResponse(asString(item, "gameId")));
        }
        return siblingList;
    }
    return Collections.emptyList();
}
优化说明
  • 新增非空前置校验,同时覆盖「siblings键不存在」、「siblings键值为null」两种异常场景,彻底避免空指针
  • 移除无用的ArrayNode提前初始化逻辑,只有确认是数组类型时才做类型转换,减少不必要的对象创建
  • 把迭代器遍历改为更简洁的增强for遍历,ArrayNode本身实现了Iterable<JsonNode>接口,可直接用增强for循环遍历

内容的提问来源于stack exchange,提问作者user9347049

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:30:04