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

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字符串,也会触发该报错。

修复方案

按以下步骤修改你的代码即可解决问题:

  1. 先添加请求错误校验,避免请求异常时后续逻辑报错
  2. 对body做类型判断,仅当是字符串时才调用JSON.parse解析
  3. 可选添加属性存在性判断,避免返回的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:24:00