首页 > 解决方案 > NodeJS:从 JSON 中提取数据,修改对象并将其发送回同一个 JSON 文件

问题描述

JSON、NodeJs 等的新手。

我希望做的是将以下 JSON 文件数据接收到 NodeJS(和 Angular)项目修改接收到的数据,然后将其发送回 JSON 文件。

JSON文件:

{
    "groups":{
        "groupid": [1,2,3],
        "name": ["g1","g2","g3"]
    },
    "rooms": {
        "room1": {
            "roomid": 1,
            "pGroup": ["g1","g2","g3"]
        },
        "room2": {
            "roomid": 2,
            "pGroup": ["g3"]
        },
        "room3": {
            "roomid": 3,
            "pGroup": ["g1","g2"]
        }
    }
} 

我可以通过执行以下操作来接收和存储数据:


        // Load in groups from groups.json

        fs.readFile('./data/groups.json', 'utf8', function(err, data){
            if (err) throw err;
            groups = [];
            let gArray = [];
            gArray = JSON.parse(data);
            console.log(gArray.groups.name[1]);
            for(let i = 0; i < gArray.groups.name.length; i++){
                groups.push(gArray.groups.name[i]);

            }           
        });

我目前用于存储数据的内容:

                groups.push(newgroup);
                //store room in JSON file
                let groupString = JSON.stringify(groups);
                fs.writeFile('data/groups.json', groupString, 'utf-8', function(err){
                    if (err) throw err;
                });

我知道上面将它放入一个字符串并存储数组,但我尝试寻找一种替代方法,我可以在其中编辑我需要的 JSON 文件的部分,但我无法在任何地方找到答案。

任何帮助都将不胜感激。

谢谢

标签: javascriptnode.jsjsonangularexpress

解决方案


为了编辑文件的内容,您需要实际写入文件

您总是可以只编辑 json 的属性并将 JavaScript 对象保存在内存中 ok 的 nodeJS 应用程序,如果它是服务器,只需将内存存储的对象直接发送到客户端,看起来文件是否已经更新了't,但是当服务器关闭时,不会保存未写入磁盘的更改

如果要保存进度,则必须写入磁盘(或某种数据库等)

编辑

但仍然有一种方法可以做你想做的事,实际上他有很多数据库工作,但对于 json 它可能有点复杂

基本上节点中的一个函数是一次只能读取文件的特定字节

https://stackoverflow.com/a/23720178/2016831

但真正的方法是使用 fs.open 然后 fs.write(look it up) 读取/写入文件的特定字节索引

问题是你怎么知道要写入文件的哪些索引,这是一门关于数据库如何工作等的完整科学,通常二进制更容易,因为它被分成不同的块,每个块都有一些头字节,这些字节引用之前和之后的块等,然后你需要读取一个根块,它告诉你要读取的 Uther 块读取等等,直到你找到你为什么要编辑的部分,然后在你这样做之后你需要更新一些其他块,或者有时不一定等查找如何从头开始制作数据库


推荐阅读