Estoy escribiendo una función que toma una matriz de objetos que contienen información y escribe esa información en el archivo JSON. Por ejemplo:
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' } ]y así sucesivamente... hay 16 de ellos.
Función que debe manejar ese proceso:
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));Escribe los datos en el archivo JSON, pero solo se escribe el último objeto. Por ejemplo, si hay 10 objetos en la matriz, solo se escribirá el décimo objeto. No entiendo cuál es el problema aquí. ¿Cómo puedo arreglar esto?
Pensé que tal vez sobrescribía los datos y por eso solo veo el último objeto, pero en esta parte newsData[obj.link] les doy a todos ID únicos.
Estoy usando un montón de módulos, solicitudes, etc. y es por eso que no puedo mostrar todo mi código. Además, hay algunas propiedades más que tienen los objetos, pero no están en inglés, así que no las incluí.
La función fs.writeFileSync vuelve a escribir el archivo completo, por lo que hace que, al hacer forEach, tenga solo la última entrada de la lista.
Es posible que desee utilizar fs.appendFile para agregar contenido al archivo o, como una variante, para acumular el resultado y escribirlo una vez.