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

fs.writeFile输出不符预期,如何用TargetMember.id作为JSON键名?

解决JSON写入时变量作为对象键名的问题

你遇到的核心问题是JavaScript对象字面量的属性名解析规则:直接写TargetMemberID的时候,它会被当作字符串字面量作为键名,而不是读取变量TargetMemberID的值。要让变量的值成为对象的键名,你需要用计算属性名语法——也就是用方括号把变量包裹起来。

修正后的代码

const TargetMemberID = TargetMember.id;
data[message.guild.id] = {
  [TargetMemberID]: { // 用方括号包裹变量,将其值作为键名
    Moderation: 'Kick',
    Target: `${TargetMember.user.tag}`,
    Moderator: `${message.author.tag}`,
    Reason: `${Reason}`,
    ID: `#${ID}`
  }
};

fs.writeFile("./data.json", JSON.stringify(data), (err) => {
  if (err) console.log(err);
});

为什么之前的写法无效?

你尝试的data[message.guild.id[TargetMember.id]]逻辑是错误的——这相当于把message.guild.id(一个字符串ID)当成数组,去取TargetMember.id对应的索引值,完全不符合你要的层级结构。正确的方式是先定位到data[message.guild.id]这个对象,再给它添加以TargetMemberID变量值为键的嵌套对象。

验证结果

现在执行代码后,生成的JSON结构会和你预期的一致:

{"726623241984278589": {"322366672625467392": {"Moderation": "Kick", "Target": "Bobo#1601", "Moderator": "Bobosky#3914", "Reason": "Testing", "ID": "#XLR6RV8M"}}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:56:28