0

我正在使用 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"}

我如何与以前的条目一起获得它?任何帮助将不胜感激!

4

2 回答 2

2

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

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' });
};
于 2021-10-15T10:48:55.470 回答
0

您需要读取当前文件,解析 JSON 内容,对其进行修改,然后保存修改后的内容:

const jsonString = fs.readFileSync(path);
const jsonObject = JSON.parse(jsonString);
jsonObject.push(item);
fs.writeFileSync(path, JSON.stringify(jsonObject));
于 2021-10-15T10:49:29.570 回答