如果 json 文件已经有特定数据,如何检查 NodeJS
How to check in NodeJS if json file already got specific data
我正在尝试使用 NodeJS 进行 CRUD 操作。但是我不知道如何检查 JSON 文件是否已经有特定的部分,然后只更新需要的对象而不是覆盖其他数据或添加新数据,如果没有它的记录。
这是我目前所拥有的(现在插入操作会覆盖整个文件并只留下插入的数据):
JSON :
JSON:
{
"id": 1,
"name": "Bill",
},
{
"id": 2,
"name": "Steve",
},
代码:
var operation = POST.operation; // POST request comes with operation = update/insert/delete
if (operation == 'insert') {
fs.readFile("data.json", "utf8", function (err) {
var updateData = {
id: POST.id,
name: POST.name,
}
var newUser = JSON.stringify(updateData);
fs.writeFile("data.json", newUsers, "utf8");
console.log(err);
})
}
else if (operation == 'update') {
fs.readFile("data.json", "utf8", function (err) {
})
}
else if (operation == 'delete') {
fs.readFile("data.json", "utf8", function (err) {
})
}
else
console.log("Operation is not supported");
我发现的最多的例子是数据库和 Express.js。所以他们并没有真正帮上什么忙。
对不起,我是新手。
所以首先,这是无效的 JSON(除非这只是文件的一部分)。您需要将整个列表包装到一个数组中才能使其有效 JSON(您可以检查您的 JSON 是否有效 here)
如果你采用这样的结构:
[
{
"id": 1,
"name": "Bill",
},
{
"id": 2,
"name": "Steve",
},
]
我认为检查 ID 是否已存在的最简单方法是将 JSON 作为数组读取并检查 ID 是否已分配。像这样:
var json = require('/path/to/data.json'); // Your object array
// In the if (operation == 'insert') block
var hadId = json.some(function (obj) {
return obj.id === POST.ID;
});
if (hasId) {
// Do something with duplicate
}
json.push({
id: POST.id,
name: POST.name
});
// Write the whole JSON array back to file
更多关于 array.some function
所以基本上你会将整个 JSON 文件保存在内存中(在 json
数组中),当你对数组进行更改时,你将整个更新后的列表写回文件.
如果该数组变得非常大,您可能 运行 会遇到问题,但此时我建议考虑使用数据库。 Mongo(即使它不是世界上最伟大的数据库)也很容易设置并在播放和试验时与 JavaScript 集成。
希望对您有所帮助!
祝你好运
我正在尝试使用 NodeJS 进行 CRUD 操作。但是我不知道如何检查 JSON 文件是否已经有特定的部分,然后只更新需要的对象而不是覆盖其他数据或添加新数据,如果没有它的记录。
这是我目前所拥有的(现在插入操作会覆盖整个文件并只留下插入的数据):
JSON :
JSON:
{
"id": 1,
"name": "Bill",
},
{
"id": 2,
"name": "Steve",
},
代码:
var operation = POST.operation; // POST request comes with operation = update/insert/delete
if (operation == 'insert') {
fs.readFile("data.json", "utf8", function (err) {
var updateData = {
id: POST.id,
name: POST.name,
}
var newUser = JSON.stringify(updateData);
fs.writeFile("data.json", newUsers, "utf8");
console.log(err);
})
}
else if (operation == 'update') {
fs.readFile("data.json", "utf8", function (err) {
})
}
else if (operation == 'delete') {
fs.readFile("data.json", "utf8", function (err) {
})
}
else
console.log("Operation is not supported");
我发现的最多的例子是数据库和 Express.js。所以他们并没有真正帮上什么忙。
对不起,我是新手。
所以首先,这是无效的 JSON(除非这只是文件的一部分)。您需要将整个列表包装到一个数组中才能使其有效 JSON(您可以检查您的 JSON 是否有效 here)
如果你采用这样的结构:
[
{
"id": 1,
"name": "Bill",
},
{
"id": 2,
"name": "Steve",
},
]
我认为检查 ID 是否已存在的最简单方法是将 JSON 作为数组读取并检查 ID 是否已分配。像这样:
var json = require('/path/to/data.json'); // Your object array
// In the if (operation == 'insert') block
var hadId = json.some(function (obj) {
return obj.id === POST.ID;
});
if (hasId) {
// Do something with duplicate
}
json.push({
id: POST.id,
name: POST.name
});
// Write the whole JSON array back to file
更多关于 array.some function
所以基本上你会将整个 JSON 文件保存在内存中(在 json
数组中),当你对数组进行更改时,你将整个更新后的列表写回文件.
如果该数组变得非常大,您可能 运行 会遇到问题,但此时我建议考虑使用数据库。 Mongo(即使它不是世界上最伟大的数据库)也很容易设置并在播放和试验时与 JavaScript 集成。
希望对您有所帮助!
祝你好运