使用 fs.append 写入 json 文件

write into json file with fs.append

我正在使用 node.js 进行一个项目,并且正在努力将正确位置的 JSON 对象放入我现有的数据中。我的文件目前看起来像这样:

[
  {
    "id": "001",
    "name": "Paul,
    "city": "London"
  },
  {
    "id": "002",
    "name": "Peter,
    "city": "New York"
  },
...
]

我试着这样安排我的数据:

var data = { id: id, name: name, city: city };

将相应的数据存储在这些变量中。然后我使用 var json = JSON.stringify(data) 并尝试

fs.appendFile("myJSONFile.json", json, function (err) {
        if (err) throw err;
        console.log('Changed!');
    }); 

文件确实发生了变化,但新条目位于方括号之后。

[
  {
    "id": "001",
    "name": "Paul,
    "city": "London"
  },
  {
    "id": "002",
    "name": "Peter,
    "city": "New York"
  },
...
]{"id":"004","name":"Mark","city":"Berlin"}

如何将它与之前的条目放在一起?任何帮助将不胜感激!

您需要先读取文件,在您的情况下,您要在文件中存储一个数组。因此,您需要将您的对象推送到您从文件中读取的数组,并将结果写回文件(不是追加):

const fs = require('fs/promises');

// ...

const addToFile = async data => {
  let fileContents = await fs.readFile('myJSONFile.json', { encoding: 'utf8' });
  fileContents = JSON.parse(fileContents);
  fileContents.push(data);
  await fs.writeFile('myJSONFile.json', JSON.stringify(fileContents, null, 2), { encoding: 'utf8' });
};

您需要读取当前文件,解析JSON内容,修改并保存修改后的内容:

const jsonString = fs.readFileSync(path);
const jsonObject = JSON.parse(jsonString);
jsonObject.push(item);
fs.writeFileSync(path, JSON.stringify(jsonObject));