如何使用Node.js/JavaScript修改JSON文件中的单个值(discord.js场景)
实现方案
首先修正你现有代码的两个问题:
- if判断中误用了赋值运算符
=,应该用全等运算符===做条件判断,否则会直接覆盖原有值,永远触发第一个分支 - 你判断的字段名
replystatus和你描述的开关字段timedStatus不一致,需要统一字段名
完整实现代码
你需要先读取整个JSON配置转为JS对象,仅修改timedStatus字段后再写回文件,其余字段(包括你的字符串数组)会完整保留不受影响:
// 引入Node.js原生文件操作模块,如果你顶部已经引入可跳过这两行 const fs = require('fs'); const path = require('path'); // 替换为你的JSON配置文件实际路径 const CONFIG_PATH = path.join(__dirname, '你的配置文件名.json'); if (cmd === prefix + "timedreplies") { // 先读取最新的配置内容,避免多指令同时修改导致的内容冲突 const timedReplies = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')); // 直接取反即可,不需要写if else分支,简化代码 timedReplies.timedStatus = !timedReplies.timedStatus; console.log(`Timed replies set to ${timedReplies.timedStatus ? 'on' : 'off'}`); // 写回配置文件,null和2参数用于格式化JSON,方便手动编辑查看 fs.writeFileSync(CONFIG_PATH, JSON.stringify(timedReplies, null, 2)); }
说明
- 该逻辑只会修改
timedStatus这一个布尔值,JSON内的字符串数组等其余内容会完全保留 - 如果你的项目中已经全局维护了
timedReplies变量,不需要每次都读文件,直接修改变量后写回即可 - 推荐加管理员权限校验,避免普通用户也能操作该开关,可在指令判断内加
if (!message.member.permissions.has('Administrator')) return;(对应discord.js v13+版本,旧版本权限字段名调整为ADMINISTRATOR)
内容的提问来源于stack exchange,提问作者Syntaxis
相关产品推荐
相关产品推荐

