javascript - 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 对象保存在内存中 ok 的 nodeJS 应用程序,如果它是服务器,只需将内存存储的对象直接发送到客户端,看起来文件是否已经更新了't,但是当服务器关闭时,不会保存未写入磁盘的更改
如果要保存进度,则必须写入磁盘(或某种数据库等)
编辑
但仍然有一种方法可以做你想做的事,实际上他有很多数据库工作,但对于 json 它可能有点复杂
基本上节点中的一个函数是一次只能读取文件的特定字节
https://stackoverflow.com/a/23720178/2016831
但真正的方法是使用 fs.open 然后 fs.write(look it up) 读取/写入文件的特定字节索引
问题是你怎么知道要写入文件的哪些索引,这是一门关于数据库如何工作等的完整科学,通常二进制更容易,因为它被分成不同的块,每个块都有一些头字节,这些字节引用之前和之后的块等,然后你需要读取一个根块,它告诉你要读取的 Uther 块读取等等,直到你找到你为什么要编辑的部分,然后在你这样做之后你需要更新一些其他块,或者有时不一定等查找如何从头开始制作数据库
推荐阅读
- python - 如何从json加载多个对象?
- android - 停止振动(API 26 级及以上)
- cumulocity - 如何在自定义小部件中使用现有的累积量小部件
- javascript - 更新后的 Firebase-Functions 错误。我能做些什么?
- amazon-web-services - 如何在 CentOS 7 上使用 yum 安装最新的 awscli?
- mysql - MySQL 将 3 个查询合二为一
- javascript - 如何在我的 sql 查询中获取正确的用户 ID?
- php - 是否可以在 swagger 3.0 定义中使用命名空间
- c# - 用于在 Simple Injector 中使用 ScopedLifestyle.Flowing 创建 Scope 的装饰器
- java - spring boot mongo db collection在知道文档ID之前获取文档