将数组写入JSON文件

时间:2019-01-05 19:17:14

标签: javascript node.js discord.js

我需要在json文件中存储与数字关联的URL数组。 这是我到目前为止所得到的:

json[message.guild.id] = {
  songs: []
};
fs.readFile("./settings.json", "utf8", (err, data) => {
  if (err) {
    throw err;
  } else {
    json[message.guild.id] = JSON.parse(data);
  }
});
json[message.guild.id].songs.push(url); // adding a new URL
fs.writeFile("./settings.json", JSON.stringify(json, null, 4), err => {
  if (err) throw err;
});

这确实有效,但是如果我尝试保存下一个URL,它将覆盖现有的URL。怎么了?如何删除其中一个保存的网址?

2 个答案:

答案 0 :(得分:1)

更新2

我的第一次尝试忽略了JSON问题,我已经将其保留给后代,但您不应这样做,因为它会在此处创建不正确的JSON对象。

但是,我很好奇您如何启动此脚本。如果与您提供的块相同,则可能每次都要重置message.guild.id的数组。您可以尝试使用类似以下的方法来防止它:

if(!json.hasOwnProperty[message.guild.id]){
    json[message.guild.id] = {};
} else if (!json[message.guild.id].hasOwnProperty('songs')){
    json[message.guild.id].songs = [];
}

同样,这只是一个假设,因为我们没有看到实现。

通过粘贴更新固定的错字

您需要将选项对象添加到writeFile方法中,并将flag键设置为'a'。这告诉writeFile以追加模式编写。文档herehere

json[message.guild.id] = {
  songs: []
};
fs.readFile("./settings.json", (err, data) => {
  if (err) {
    throw err;
  } else {
    json[message.guild.id] = JSON.parse(data);
  }
});
json[message.guild.id].songs.push(url); // adding a new URL
fs.writeFile("./settings.json", {encoding:"utf8", flag:'a'}, JSON.stringify(json, null, 4), err => {
  if (err) throw err;
});

答案 1 :(得分:0)

您正在使用回调函数,因此不能那样使用

json[message.guild.id] = {
  songs: []
};
fs.readFile("./settings.json", "utf8", (err, data) => {
  if (err) {
    throw err;
  } else {
    json[message.guild.id] = JSON.parse(data);
    json[message.guild.id].songs.push(url); // adding a new URL
    fs.writeFile("./settings.json", JSON.stringify(json, null, 4), err => {
      if (err) throw err;
    });
  }
});

这应该可以,但是似乎没有道理。

看看异步函数,回调和Promise。特别是回调的工作方式,您的代码必须在每个函数中执行