使用JavaScript附加到现有JSON文件

时间:2019-03-01 22:13:49

标签: javascript json discord

我现在正在开发一个Discord机器人,该机器人从JSON文件中读取响应。基本格式如下:

  "matt":
  {
     "insults" : ["test 1", 
                  "test 2", 
                  "test 3", 
                  "test 4"
                 ]
  },

我当前正在使用一个函数,该函数允许用户使用!addInsult命令,后跟一个字符串,该字符串随后将附加到现有数组上。

我想要的工作流程如下:

用户键入以下内容:!addInsult test 5。然后,这会将insults下的matt的JSON对象修改为以下内容:

  "matt":
  {
     "insults" : ["test 1", 
                  "test 2", 
                  "test 3", 
                  "test 4",
                  "test 5"
                 ]
  },

这样做可以让我的朋友将数据添加到我的机器人中,而无需每次我们想要新内容时都手动编辑JSON。

解决这个问题的最佳方法是什么?我已经研究了这种叫做“推”的东西,但是我真的不明白它是如何工作的。

这是我到目前为止所拥有的。我认为我朝着正确的方向前进,但不确定:

在脚本的开头建立了以下内容:

// contains the insults
var insults = require('./insults.json');

// get the insults from the json file specific to user
var insultsString = JSON.stringify(insults);
var json = JSON.parse(insultsString);

这是将要追加的函数:

// command that allows users to add to the pool of insults
function addInsultCommand(args, receivedMessage)
{
  // create an object that contains the information for the json file
  json["bot"].push(["test"]);

  receivedMessage.channel.send(json.matt.insults[0]);
}

2 个答案:

答案 0 :(得分:0)

所以这里有一个误解; JS不写文件。

您正在使用webpack,这使您可以使用webpack加载器{。{json}} {.1},但这仅在使用dev服务器时有效。分发代码时,此方法将不起作用,因为.json将被编码到您的输出包中。

.js无法为您(本地除外)编写文件,因此您需要做两件事:

1)从Web服务器上下载.json,而无需使用webpack加载器。

2)修改内存中的JSON数据

3)将JSON数据上传到Web服务器,以便它为您编写文件。

除此之外,我无法遵循您的示例代码。您引用了require,但看不到它的定义位置。这是某种不和谐的整合吗?您可能需要重新陈述您的问题,并使用可重现的测试代码来最小化该问题的证据。

答案 1 :(得分:0)

JSON.stringify会将javascript对象转换为JSON对象。 JSON.parse将执行相反的操作(将JSON对象转换为Javascript对象)。假设insults.json是json对象,则无需将其转换为字符串。您可以执行JSON.parse(insults)将其转换为javascript对象。

我不确定您打算对addInsultCommand中的args变量做什么,但是我现在暂时忽略,并在下面提供一些步骤。

1)将JSON对象(侮辱)变成JS对象

2)创建一个函数,该函数接受一个JS对象和一个receiveMessage(要添加的侮辱),并将其分配给JS对象中的正确位置。

3)将JS对象转换为JSON(使用JSON.stringify),并将insults.json的内容替换为更新后的值。