Javascript 将数组写入JSON文件
我需要在json文件中存储一个与数字关联的URL数组。 到目前为止,我得到的是:Javascript 将数组写入JSON文件,javascript,node.js,discord.js,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.g
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。有什么问题?我如何删除保存的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;
});
}
});
这应该是可行的,但似乎没有意义
看看异步函数、回调和承诺。特别是回调如何工作,您的代码必须在每个函数内部执行 我的第一次尝试忽略了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
方法添加一个options对象,并将标志
键设置为“a”。这告诉writeFile
以追加模式写入。文件和文件
您正在
写入文件,这就是原因。您要做的是将
附加到它。看看这个:它的可能复制品并不清楚你在保存什么。如果您展示了settings.json
示例:{“498208636234104846”:{“songs”:[“https://www.youtube.com/watch?v=S81bLqpstUE" ] } }
OP提到如果我试图保存下一个URL,它只会覆盖现有的一个
——这意味着它正在删除现有内容。因此,他不应该使用appendFile
函数而不是writeFile
?是的,他应该使用@joe answer声明的标志。然而,问题是回调函数有问题,附加到JSON文件如何工作?这不会产生格式错误的JSON吗?你完全正确。我的重点是更正覆盖而不是数据格式。@Joe我仍然无法理解,我希望此文件的结构如下:{“498208636234104846”:{“songs”:https://www.youtube.com/watch?v=S81bLqpstUE", "https://www.youtube.com/watch?v=5lJhX6PGmMo" ] }, “457965143612194829”:{“歌曲”:https://www.youtube.com/watch?v=2YeDOa2XoeF", "https://www.youtube.com/watch?v=cPOvNhET5gI“]}
当用户执行命令为给定的帮会ID添加歌曲URL时,此脚本将启动。希望您能理解我的意思。
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;
});