我需要在 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
以附加模式写入。文档 here和 here .
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/