You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用返回JSON数组的API遇空值报错:无法读取null的'name'属性

问题根源分析

你遇到的报错「Cannot read property 'name' of null」,核心原因是你先尝试访问了element.fields.resolution.name,但此时element.fields.resolution本身就是null——null没有任何属性,所以在你执行判断逻辑之前,就已经触发了报错,你的空值处理逻辑根本没机会执行。

解决方案

这里有几种简洁且安全的处理方式,根据你的环境选择:

1. 使用ES2020+可选链+空值合并运算符(推荐)

这是最简洁的现代写法,能同时处理resolutionnullundefined的情况:

let comArr = [];
JSONData.issues.forEach(element => {
  comArr.push({
    Resolution: element.fields.resolution?.name ?? "some default value"
  });
});
  • ?. 可选链操作符:如果resolutionnull/undefined,会直接返回undefined,不会继续访问name,避免报错
  • ?? 空值合并运算符:只有当左边的值是nullundefined时,才会使用右边的默认值

2. 兼容旧环境的嵌套条件判断

如果你的运行环境不支持ES2020语法,就用传统的条件判断先检查resolution

let comArr = [];
JSONData.issues.forEach(element => {
  let resolutionName = "some default value";
  // 先确认resolution存在,再检查name是否有效
  if (element.fields.resolution && element.fields.resolution.name !== null) {
    resolutionName = element.fields.resolution.name;
  }
  comArr.push({
    Resolution: resolutionName
  });
});

也可以用调整顺序的三元运算符:

let comArr = [];
JSONData.issues.forEach(element => {
  comArr.push({
    Resolution: element.fields.resolution === null 
      ? "some default value" 
      : (element.fields.resolution.name ?? "some default value")
  });
});
额外提醒

如果API返回的element.fields也有可能为null,那你需要再多加一层判断,比如:

Resolution: element.fields?.resolution?.name ?? "some default value"

这样能彻底避免所有嵌套属性的访问报错。

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

火山引擎 最新活动