[英]how to push a data with key of an array of objects without overwriting existing json data using node js?
我有一个 object,看起来像这样:
{
"mark": [
{
"id":1,
"name": "mark",
"age":26
},
{
"id":2,
"name": "mark",
"age":25
}
],
"jack": [
{
"id":1,
"name": "jack",
"age":26
},
{
"id":2,
"name": "jack",
"age": 24,
}
]
}
如果添加新用户,我得到的是 OUTPUT,它不会附加,但会被覆盖或创建为新用户 OBJECT
{
"mark": [
{
"id":1,
"name": "mark",
"age":26
},
{
"id":2,
"name": "mark",
"age":25
}
],
"jack": [
{
"id":1,
"name": "jack",
"age":26
},
{
"id":2,
"name": "jack",
"age": 24,
}
],
} "Josh": [
{
"id":1,
"name": "Josh",
"age":26
},
{
"id":2,
"name": "Josh",
"age": 24,
}
]
预期的
如果新的人员数据到达我的 JSON 文件,则应将其附加到下一个包含对象数组键值的数组,
像
{
"mark": [
{
"id":1,
"name": "mark",
"age":26
},
{
"id":2,
"name": "mark",
"age":25
}
],
"jack": [
{
"id":1,
"name": "jack",
"age":26
},
{
"id":2,
"name": "jack",
"age": 24,
}
],
"Josh": [
{
"id":1,
"name": "Josh",
"age":26
},
{
"id":2,
"name": "Josh",
"age": 24,
}
]
}
我在阅读 JSON 文件后尝试了这种方法
var newObject = array.reduce(function (obj, value) {
var key = `${value.name}`;
if (obj[key] == null) obj[key] = [];
obj[key].push(value);
return obj;
}, {});
console.log(newObject);
fs.appendFile("users.json", newObject, (err) => {
res.send(JSON.stringify(newObject));
});
就像已经给出的建议一样,但是使用async fs i/o。
import { promises as fs } from 'fs'; // or require('fs').promises
// inside the OP's route
const filename = 'users.json';
try {
const array = await fs.readFile(filename);
// OP's code here
// const newObject = array.reduce(...
await fs.writeFile(filename, newObject);
return res.send(JSON.stringify(newObject));
} catch (error) {
return res.status(500).send({ message: 'error' });
}
另请注意,所有这些都是数据库所做的。
你必须先从 JSON 和 append 读取新的 object 到 JSON 的数据,然后将其写回文件。
const data = fs.readFileSync('users.json');
.
.
fs.writeFileSync('users.json', {...data, ...newObject});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.