如果 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 集成。

希望对您有所帮助!

祝你好运