javascript - 将数组写入 JSON 文件

标签 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

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

但是,我很好奇你是如何启动这个脚本的。如果它与您提供的 block 相同,您可能每次都会重置 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;
});

关于javascript - 将数组写入 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055379/

相关文章:

javascript - 如何使用 JQuery 在 2 个元素之间画一条线并刷新该线?

javascript - React.js - REF 未定义

node.js - 在不重启的情况下重新加载 process.env 变量

mysql - 在 mySQL 表中插入卡片数组,控制台没有错误

javascript - 如何检查客户端(机器人)的最高角色位置

javascript - 执行后,window.setTimeout() 抛出 'Uncaught TypeError: undefined is not a function' ?

javascript - 离线时本地 WebRTC 连接卡在 "checking"

node.js - 如果 Node.js 是服务器端,那么它对客户端不可见吗?

node.js - Express.js 和 Mongoose 模型关系 - 在模型或路由器中?

javascript - Discord.js javascript 命令处理程序 - 找不到模块错误