【问题标题】:How would i add a key:value pair to a json list in node.js?如何将键:值对添加到 node.js 中的 json 列表?
【发布时间】:2021-08-03 06:09:27
【问题描述】:

我正在使用 node.js,我想将命令中的参数和服务器 ID 作为键:值对添加到 json 文件中,如下所示:

{

    "guildid": "args",
    "guildid2": "args2",

}

而我目前拥有的代码与我想要的相差甚远,这里的代码:

const command = args.shift().toLowerCase();
const args = message.content.slice(config.prefix.length).trim().split(' ');

if (command === 'setup') {
const guildid = message.guild.id
        const data = { 
            [guildid]: `${args}`
            }
        const groupname = JSON.stringify(data, null, 2);
        fs.writeFile('./groups.json', groupname,{flags: "a"}, finished);
        function finished(err) {
            message.channel.send(`Success! Your group, **${args}**, has been registered to **${message.guild.name}**`
            )}

输出我想要的 json 文件,但如果我再次运行该命令,它只会追加到末尾:

{
  "guildid": "args"
}{
  "guildid2": "args2"
}

我现在明白,使用 a 标志只是附加到末尾,而 const 数据是给它括号的东西,但我想知道如何能够按照我在开头显示的方式格式化它.对我犯的任何明显错误表示歉意,这是我第一次使用 javascript 和 node.js。

【问题讨论】:

    标签: javascript node.js discord.js fs


    【解决方案1】:

    您必须首先使用fs.readFile[Sync]JSON.parse 获取原始文件,然后像添加任何其他对象一样添加属性:

    obj.key = 'value';
    
    // or in your case:
    obj[key_variable] = 'value';
    

    您还应该省略'a' 标志,因为它会附加另一个对象(导致语法错误),而不是修改已经存在的对象。您的代码应如下所示:

    const guildid = message.guild.id;
    const data = JSON.parse(fs.readFileSync('/groups.json'));
    
    /* 
      You could either use:
      data[guildid] = `${args}`;
    
      OR, when stringifying to the file:
      const groupname = JSON.stringify({ 
        ...data, 
        [guildid]: `${args}` 
      }, null, 2);
    
      Either way will work
    */ 
    
    data[guildid] = `${args}`;
    const groupname = JSON.stringify(data, null, 2);
    
    // remove { flags: 'a' }
    fs.writeFile('./groups.json', groupname, finished);
    
    // you should probably write some error handling
    function finished(err) {
     message.channel.send(
      `Success! Your group, **${args}**, has been registered to **${message.guild.name}**`
     );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-08
      • 2022-01-20
      • 1970-01-01
      • 2010-11-09
      • 2021-11-21
      • 2023-03-28
      相关资源
      最近更新 更多