NodeJS:从 JSON 中提取数据,修改对象并将其发送回同一个 JSON 文件
Posted
技术标签:
【中文标题】NodeJS:从 JSON 中提取数据,修改对象并将其发送回同一个 JSON 文件【英文标题】:NodeJS: Pulling data from JSON,modifying and Sending object back to the same JSON file 【发布时间】:2020-12-10 16:30:31 【问题描述】: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 文件的部分,但我找不到答案任何地方。
任何帮助都将不胜感激。
谢谢
【问题讨论】:
【参考方案1】:为了编辑文件的内容,您需要实际写入文件
您总是可以只编辑 json 的属性并将 javascript 对象保存在内存中 ok 的 nodeJS 应用程序,如果它是服务器,只需将内存存储的对象直接发送到客户端,看起来文件是否已更新确实不是,但是当服务器关闭时,不会保存未写入磁盘的更改
如果您想保存进度,您必须写入磁盘(或某种数据库等)
编辑
但是还是有办法做你想做的,其实他很多数据库都在工作,但是对于json可能会复杂一些
基本上是节点中的一个函数,它一次只能读取文件的特定字节
https://***.com/a/23720178/2016831
但真正的方法是使用 fs.open 然后 fs.write(查找)来读取/写入文件的特定字节索引
问题是你怎么知道要写入文件的哪些索引,这是一门关于数据库如何工作等的完整科学,通常二进制更容易,因为它被分成不同的块,每个块都有一些头字节,这些字节引用之前和之后的块的字节索引等,然后你需要读取一个根块,它告诉你要读取的 Uther 块读取等等,直到你找到你为什么要编辑的部分,然后在你这样做之后你需要更新一些其他块,或者有时不一定等查找如何从头开始制作数据库
【讨论】:
以上是关于NodeJS:从 JSON 中提取数据,修改对象并将其发送回同一个 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS HttpGet 到带有 JSON 响应的 URL