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文件中我需要的部分,但我在任何地方都找不到答案。

任何帮助都将不胜感激。

感谢

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

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

如果你想保存你的进度,必须写入磁盘(或某种数据库等(

编辑

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

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

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

但真正的方法是使用fs.open,然后使用fs.write(查找(来读取/写入文件的特定字节索引

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

最新更新