无法解析API响应JSON,获取timestamp字段返回undefined怎么解决
问题成因
- 冗余的序列化/反序列化操作:如果
jobDetails本身已经是解析完成的JavaScript对象,JSON.stringify()将其转为JSON字符串后再用JSON.parse()转回对象的操作完全没有必要,若jobDetails是未处理的非标准JSON字符串,该操作还会导致数据结构异常,无法取到对应字段。 - 非标准JSON格式问题:你给出的响应示例使用单引号包裹键名与字符串值,而标准JSON规范强制要求使用双引号,直接对这类字符串执行JSON解析会抛出语法错误,导致解析结果异常。
- 数据层级判断错误:若API返回结果存在外层包裹(比如多数接口会把实际业务数据放在
data属性下),直接从根层级取timestamp自然会返回undefined。
解决方案
- 先确认
jobDetails的实际类型,执行console.log(typeof jobDetails, jobDetails)判断它是字符串类型还是已经解析完成的对象类型。 - 如果是单引号包裹的非标准JSON字符串,先替换单引号为双引号再解析:
const parsedData = JSON.parse(jobDetails.replace(/'/g, '"')) console.log("timestamp", parsedData.timestamp)
- 如果已经是解析完成的对象,直接取值即可,不需要多余的序列化反序列化操作:
console.log("timestamp", jobDetails.timestamp)
- 若API返回数据存在外层包裹,先找到业务数据所在层级再取值,比如业务数据在
data字段下则写为jobDetails.data.timestamp。
内容的提问来源于stack exchange,提问作者Code cracker
相关产品推荐
相关产品推荐

