gpt4 book ai didi

javascript - 更改 json 对象中的数组条目

转载 作者:行者123 更新时间:2023-12-03 00:27:03 25 4
gpt4 key购买 nike

我已经使用 NodeJS 的 fs.createReadStream() 从文件中提取了 json,现在发现将数据写回到文件中很困难(已经解析,然后根据需要进行字符串化)。

我正在开发的 Discord-Bot 会删除文本 channel ,然后“重新创建”它们(具有相同的标题)以清除聊天 - 它动态抓取 channel ID 并将它们放入文件中,直到 channel 被删除。然而,文件写入过程最终出错。

这是我的第一次尝试:

let channels_json = fs.createReadStream()
//let channels_json = fs.readFileSync(`${__dirname}\\..\\json\\channels.json`);
let obj = (JSON.parse(channels_json)).channelsToClear;
let i = 0;
obj.forEach(id => {
i++;
if(id === originalId){
obj[i] = channela.id;
}
});
obj += (JSON.parse(channels_json)).infoChannel;
obj += "abc";
json = JSON.stringify(obj);
channels_json.write(json);

这是我的第二次:

let id_to_replace = message.guild.channels.get(channels[channel]).id;
//let channels_json = fs.readFileSync(`${__dirname}\\..\\json\\channels.json`);
let obj;
let channels_json = fs.createReadStream(`${__dirname}\\..\\json\\channels.json`,function(err,data){
if (err) throw err;
obj = JSON.parse(data);
if (obj["channelsToClear"].indexOf(id_to_replace) > -1) {
obj["channelsToClear"][obj["channelsToClear"].indexOf(id_to_replace)] = channela.id;
//then replace the json file with new parsed one
channels_json.writeFile(`${__dirname}\\..\\json\\channels.json`, JSON.stringify(obj), function(){
console.log("Successfully replaced channels.json contents");
});
//channels_json.end();
}
});

最终结果是使用新的 channel ID 更新 json 文件中的“channelsToClear”数组。控制台/Node 输出各不相同,所有这些都与“使用选项对象创建 channel ”或“Buffer.write”(全部无关)有关 - json 文件保持不变..

最佳答案

您使用 Streams 的方式不正确。您无法通过读取流写回。

对于简单的脚本类型的事情,流式传输可能有点大材小用。流要复杂得多,虽然对于高效应用程序来说是值得的,但对于看起来相对较快的应用程序来说却不是。

使用 fs.readFileSyncfs.writeFileSync 来获取和写入数据。

就您实际搜索和替换 channel 而言,我认为任何一种方法都可以,但假设只有一个替换,第二种方法可能更好。

关于javascript - 更改 json 对象中的数组条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com