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
相关产品推荐
相关产品推荐

