繁体   English   中英

JavaScript:如何将数据添加到JSON文件中的数组

[英]JavaScript: how to add data to an array inside JSON file

我正在尝试构建一个简单的Discord.js机器人,但是在将用户输入添加到存储在json文件中的数组中时遇到问题。

我想拥有一个json文件,该文件将存储机器人可以借鉴的信息,包括一系列引号,这些引号也可以由用户添加。 当前,settings.json文件如下所示:

{ "token" : , //connection token here

  "prefix" : "|", //the prefix within messages that identifies a command

  "quotes" : [] //array storing a range of quotes
}

然后,我可以从数组中提取信息,从当前存储的那些中选择一个随机报价,如下所示:

const config = require("./settings.json");

var quotes = config.quotes;

function randomQuote() {
    return quotes[Math.floor(Math.random() * quotes.length)];
};


if(message.content.toLowerCase() === prefix + "quote") {

    message.channel.send(randomQuote());

}

所有这些都按预期工作,但是我无法终生确定如何允许用户向数组添加引号(它会使用| addquote之类的命令)。 我知道,为了将数据写入json文件,我将使用以下方法:

var fs = require('fs');

let test = JSON.parse(fs.readFileSync("./test.json", "utf8"));

if(message.content.toLowerCase() === 'test') {

    test++;

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

}

但是我现在要做什么-在现有的json文件中定位包含特定于该数组的其他数据的特定数组,并添加一个新条目而不是覆盖其中的内容-我很困惑。 我到处走走了很多,但是或者找不到我想要的东西,或者发现它时我不明白。 有人可以帮我吗?

将新项目推入数组:

config.quotes.push(newQuote);

编辑 :我要指出的是,使用require读取一个JSON文件这种方式可能会对其进行缓存,所以改变您对文件,你的下一次可能不会出现require它。

除了文件末尾的串联之外,无法“编辑”文件。 要修改之外的文件,需要在内存中进行修改,然后用内存中的值覆盖现有文件。 就是说,使用这样的文件存储用户输入存在很多问题,其中包括:限制文件的大小; 可能从同一文件读取的多个进程可能被其中任何一个覆盖; 进程崩溃或写入过程中的错误将使文件无用; 等等

您是否看过真实的数据存储? 任何简单的数据库都可以工作,而这实际上就是它们的用途。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM