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

如何在JS中读取JSON文件数据 开发Discord机器人时出现undefined错误

问题修复方案

核心原因

fs.readFileSync() 读取本地文件时默认返回的是 Buffer 二进制流,并非解析后的 JavaScript 对象,直接访问 .sentences 属性自然得到 undefined,调用 undefined.length 就触发了你遇到的类型错误。

修复步骤

  1. 读取JSON文件后,用JSON.parse()方法将文本内容解析为可操作的JS对象
  2. 建议用__dirname拼接相对路径,避免绝对路径依赖本地目录结构,后续迁移部署不会报错
  3. 额外注意:你当前逻辑直接发送整个sentence对象会输出[object Object],需要明确取对象下的sentence属性输出文本内容

修复后完整代码

const fs = require('fs');
const path = require('path');

module.exports = {
    name: 'dactylo',
    description: 'Démarre une partie de dactylo',
    execute(message) {
        message.reply("Recopiez la phrase suivante le plus rapidement possible :")
        // 拼接当前文件所在目录的相对路径,兼容性更强
        const jsonPath = path.join(__dirname, 'dactylo.json');
        const rawData = fs.readFileSync(jsonPath);
        // 解析JSON文本为JS对象
        const data = JSON.parse(rawData);

        const sentences = data.sentences;
        const randomSentence = sentences[Math.floor(Math.random() * sentences.length)];
        // 取句子文本内容发送
        message.channel.send(randomSentence.sentence);
    },
};

可选排查点

如果修改后仍报错,可以在解析后添加日志输出验证内容:

const data = JSON.parse(rawData);
console.log(data); // 控制台输出确认是否正确拿到sentences数组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 08:30:04