Node.js抛出undefined:1 [object Object]错误 开发Discord机器人JSON解析报错如何解决
报错原因与解决方案
报错根源
你遇到的undefined:1 [object Object]报错完全来自JSON.parse(body)这行代码:
- JSON.parse方法只能接收JSON格式的字符串作为入参,当你传入的是一个JS对象时,方法会先自动将对象转为字符串,得到的结果就是
[object Object],解析这段非法JSON内容就会抛出对应报错,行号显示undefined:1是因为解析的目标没有合法的源文件标识。 - 出现这个问题的核心原因是你用的request库在检测到响应头的Content-Type为application/json时,会自动将返回的JSON字符串预解析为JS对象,你不需要再手动调用JSON.parse二次解析。
- 小概率场景下也可能是请求本身出错(比如网络异常、鉴权失败),此时body参数是错误对象而非预期的JSON字符串,也会触发该报错。
修复方案
按以下步骤修改你的代码即可解决问题:
- 先添加请求错误校验,避免请求异常时后续逻辑报错
- 对body做类型判断,仅当是字符串时才调用JSON.parse解析
- 可选添加属性存在性判断,避免返回的JSON结构不符合预期时抛出属性读取错误
修改后的代码示例:
request("https://link-to-a-private-json", (e, r, body) => { // 校验请求是否正常 if (e || r.statusCode !== 200) { console.error('请求异常:', e || `状态码${r.statusCode}`); return; } // 根据body类型决定是否要解析JSON const status = typeof body === 'string' ? JSON.parse(body) : body; // 兼容异常结构,避免属性读取报错 const games = status?.content?.content || []; let cIndex = -1; for(let i = 0; i < games.length; i++) { if(games[i].name === "Game 2") { cIndex = i; break; } } // 后续业务逻辑 })
额外注意
你原代码中使用的status、games、cIndex、i变量都没有加声明关键字(let/const),会默认挂载到全局对象,容易引发变量污染类的异常问题,建议全部补充声明。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

