【问题标题】:Changing an array entry within a json object更改 json 对象中的数组条目
【发布时间】:2019-05-31 09:29:29
【问题描述】:

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

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

这是我的第一次尝试:

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();
    }
});

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

【问题讨论】:

    标签: javascript node.js json fs


    【解决方案1】:

    您错误地使用了 Streams。您无法通过读取流写回。

    对于一个简单的脚本类型的东西,流式传输可能是多余的。流相当复杂,虽然对于高效的应用程序来说是值得的,但对于看起来相对较快的应用程序来说却不是。

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

    就您实际搜索和替换频道而言,我认为这两种方法都行得通,但假设只有一个替代品,第二种方法可能更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多