JavaScript:如何向JSON文件内的数组添加数据

JavaScript:如何向JSON文件内的数组添加数据,javascript,arrays,json,node.js,discord.js,Javascript,Arrays,Json,Node.js,Discord.js,我正在尝试构建一个简单的Discord.js bot,但在将用户输入添加到存储在json文件中的数组时遇到了问题 我希望有一个json文件来存储机器人可以利用的信息,包括一个引号数组,用户也可以将其添加到其中。当前,settings.json文件如下所示: { "token" : , //connection token here "prefix" : "|", //the prefix within messages that identifies a command "quote

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

我希望有一个json文件来存储机器人可以利用的信息,包括一个引号数组,用户也可以将其添加到其中。当前,settings.json文件如下所示:

{ "token" : , //connection token here

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

  "quotes" : [] //array storing a range of quotes
}
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)
    });

}
然后,我可以从数组中提取信息,从当前存储的数据中选择一个随机引号,如下所示:

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文件,我会使用以下内容:

{ "token" : , //connection token here

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

  "quotes" : [] //array storing a range of quotes
}
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);

Edit:我应该指出,使用
require
以这种方式读取JSON文件可能会将其缓存,因此您对该文件所做的更改可能不会在下次
require
时显示。

将新项推送到数组中:

config.quotes.push(newQuote);
Edit:我应该指出,使用
require
以这种方式读取JSON文件可能会缓存它,因此您对该文件所做的更改可能不会在下次
require
时显示出来。

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

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

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


你看过真实的数据存储吗?任何简单的DB都能工作,这就是它们的用途。

现在我觉得自己像个十足的白痴。非常感谢你为我指出了显而易见的事实!另外,关于
require
,我正在研究如何使用
JSON.parse(fs.readFileSync(“./settings.JSON”,“utf8”)相反,这会更好吗?哈哈。。。我们都有这样的日子。你的建议行得通。更好的方法是主观的,因为您正在执行阻塞I/O(通常不赞成)。你确认缓存了吗?也就是说,
require
JSON文件,推到数组,写回文件,然后再次
require
,检查是否反映了更改?现在我觉得自己像个十足的白痴。非常感谢你为我指出了显而易见的事实!另外,关于
require
,我正在研究如何使用
JSON.parse(fs.readFileSync(“./settings.JSON”,“utf8”)相反,这会更好吗?哈哈。。。我们都有这样的日子。你的建议行得通。更好的方法是主观的,因为您正在执行阻塞I/O(通常不赞成)。你确认缓存了吗?也就是说,
require
JSON文件,推到数组,写回文件,然后再次
require
,检查是否反映了更改?我打算继续往下说,但我仍在努力掌握这里的基本内容,所以我觉得这可能有点超出我现在的能力范围。不过,如果你有任何关于在哪里查找信息的建议,我将不胜感激!我打算更进一步,但我仍在努力掌握这里的基本知识,所以我觉得这可能是我现在力所不及的。不过,如果你有任何关于在哪里查找信息的建议,我将不胜感激!