【发布时间】:2021-10-13 05:37:16
【问题描述】:
我正在编写一个函数,该函数接受一个包含一些信息的对象数组,并将该信息写入 JSON 文件。 例如:
let arr = [
{
creator: 'Girchi',
title: '???? Hello World',
link: 'https://www.facebook.com/GirchiParty/posts/4693474864037269',
pubDate: 'Sat, 07 Aug 2021 12:07:42 GMT',
guid: '9386a170c1f52c7f388a7e1e236957e5',
isoDate: '2021-08-07T12:07:42.000Z'
},
{
creator: 'Someone else',
title: '???? Hi World',
link: 'https://www.facebook.com/GirchiParty/posts/4693474864037269',
pubDate: 'Sat, 07 Aug 2021 12:07:42 GMT',
guid: '9386a170c1f52c7f388a7e1e236957e5',
isoDate: '2021-08-07T12:07:42.000Z'
}
]
等等.. 有 16 个。
应该处理该过程的函数:
function writeTheData(obj) {
fs.readFile('./assets/data/fb.json', (err, data) => {
if (err) throw err;
let newsData = JSON.parse(data);
newsData[obj.link] = {
...newsData[obj.link],
link: obj.link,
title: obj.title,
text: obj.contentSnippet,
articleDate: obj.pubDate,
content: obj.content
};
newsData = JSON.stringify(newsData)
fs.writeFileSync("./assets/data/fb.json", newsData, (error) => {
if (error) console.log(error)
console.log('success');
})
})
}
array.forEach(obj => writeTheData(obj));
它将数据写入 JSON 文件,但只写入最后一个对象。例如,如果数组中有 10 个对象,则只会写入第 10 个对象。我不明白这里有什么问题。我该如何解决这个问题?
我认为它可能会覆盖数据,这就是为什么我只看到最后一个对象,但在这部分 newsData[obj.link] 我给他们所有的唯一 ID。
我正在使用一堆模块、请求等,这就是为什么我无法显示我的所有代码。此外,对象还有一些属性,但它们不是英文的,所以我没有包括它们。
【问题讨论】:
-
尝试使用
readFileSync。问题是您在同步方法中组合异步调用,例如forEach -
您应该追加到文件而不是写入文件,因为它会在每次新调用时重写整个内容。
-
谢谢大家的建议!
标签: javascript node.js