【问题标题】:Appending to an existing JSON file using JavaScript使用 JavaScript 附加到现有的 JSON 文件
【发布时间】:2019-07-23 23:33:09
【问题描述】:

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

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

我目前正在开发一个函数,该函数允许用户使用!addInsult 命令,后跟一个字符串,然后将其附加到现有数组中。

我想要的工作流程是这样的:

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

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

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

最好的解决方法是什么?我研究过这个叫做 push 的东西,但我真的不明白它是如何工作的。

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

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

// 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]);
}

【问题讨论】:

    标签: javascript json discord


    【解决方案1】:

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

    您正在使用 webpack,它让您 require 使用 webpack 加载器的 .json,但这仅在使用开发服务器时有效。这在分发您的代码时不起作用,因为 .json 将被编码到您的输出包中。

    .js 不能为你写文件(本地除外),所以你需要做的是两个方面:

    1) 从网络服务器下载 .json,不使用 webpack 加载器。

    2) 修改内存中的JSON数据

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

    除此之外,我无法遵循您的示例代码。你引用receivedMessage.channel.send,但我看不出这是在哪里定义的。这是某种不和谐的整合吗?您可能需要使用可重现的测试代码重新陈述您的问题以及问题的最小证明。

    【讨论】:

    • 如果你愿意,我可以发布整个代码。是的,receivedMessage.channel.send 是一个不和谐的特定事物。此代码托管在 Gltich 上,它为我在线创建了一个快速服务器。
    • 是的,这会有所帮助,也许我可以指出断开连接。实际上,我看不到 json["bot"].push(["test"]); 是如何连接到 json.matt.insults
    【解决方案2】:

    JSON.stringify 会将 javascript 对象转换为 JSON 对象。 JSON.parse 将做相反的事情(将 JSON 对象转换为 Javascript 对象)。假设instructions.json 是一个json 对象,您不需要将其转换为字符串。您只需执行 JSON.parse(insults) 即可将其转换为 javascript 对象。

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

    1) 将 JSON 对象(侮辱)转为 JS 对象

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

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

    【讨论】:

      猜你喜欢
      • 2013-07-05
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多