如何在JS中读取JSON文件数据 开发Discord机器人时出现undefined错误
问题修复方案
核心原因
fs.readFileSync() 读取本地文件时默认返回的是 Buffer 二进制流,并非解析后的 JavaScript 对象,直接访问 .sentences 属性自然得到 undefined,调用 undefined.length 就触发了你遇到的类型错误。
修复步骤
- 读取JSON文件后,用
JSON.parse()方法将文本内容解析为可操作的JS对象 - 建议用
__dirname拼接相对路径,避免绝对路径依赖本地目录结构,后续迁移部署不会报错 - 额外注意:你当前逻辑直接发送整个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
相关产品推荐
相关产品推荐

