如果json文件已经得到特定的数据,如何检查NodeJS

我正在尝试使用NodeJS进行CRUD操作。 但是我不知道如何检查JSON文件是否已经得到了特定的部分,然后只更新需要的对象而不覆盖其他数据,或者在没有logging的情况下添加新的数据。

这是我到目前为止(现在的插入操作覆盖整个文件,并保留只有插入的数据):

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"); 

我发现的大多数例子都是用Database和Express.js。 所以他们没有太多帮助。

对不起,我是一个新手。

所以首先,这不是有效的JSON(除非这只是文件的一部分)。 您将需要将整个列表包装到一个数组中,使其成为有效的JSON(您可以检查您的JSON 在这里是否有效)

如果你像这样的结构:

 [ { "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数组中),当你改变数组时,你把整个更新列表写回文件。

如果这个数组变得非常大,你可能会遇到这个问题,但是在那个时候,我会build议使用数据库。 Mongo (所有这些都不是世界上最好的数据库)很容易安装,并在玩和试验的时候与JavaScript集成。

我希望这有帮助!

祝你好运