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

Posted

技术标签:

【中文标题】JavaScript:如何将数据添加到 JSON 文件中的数组【英文标题】:JavaScript: how to add data to an array inside JSON file 【发布时间】:2018-08-25 15:17:04 【问题描述】:

我正在尝试构建一个简单的 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 文件中的特定数组为目标,该文件包含与数组分开的其他数据,并添加一个新条目而不是覆盖那里的内容 - 我非常难过.我环顾四周,但要么我没有找到我要找的东西,要么当我找到它时我无法理解它。有谁能帮帮我吗?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我打算更进一步,但我仍在努力掌握这里的基本内容,所以我觉得这可能有点超出我现在的能力范围。不过,如果您对在哪里查找相关信息有任何建议,我将不胜感激!【参考方案2】:

将新项目推入数组:

config.quotes.push(newQuote);

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

【讨论】:

现在我感觉自己像个白痴。非常感谢您指出对我来说显而易见的事情!另外,关于require,我正在考虑改用JSON.parse(fs.readFileSync("./settings.json", "utf8"));,这样会更好吗? 大声笑...我们都有这样的日子。你的建议会奏效。 Better 是主观的,因为您正在阻塞 I/O(通常不赞成)。您是否验证了缓存?也就是requireJSON文件,push到数组,写回文件,再require再检查一下变化有没有反映?

以上是关于JavaScript:如何将数据添加到 JSON 文件中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Json 数据从 javaScript 发送到 Flask

如何将 json 数据从 ruby​​ 控制器传递到 javascript (Rails 6.1)?

如何将json从java传递到javascript函数

如何将json数据中的对象添加到nsmutablearray?

C#中json的命名空间是哪个,还要添加啥引用?

如何在使用多处理时将数据添加到 json 文件?