Me gustaría almacenar JSON en un archivo de texto. Usando:
let obj = {'column':empty,'ppas':ppa}; await myFunctions.addToStorage(obj); async function addToStorage(obj) { const fs = require("fs"); fs.readFile("storage.json", function (err, data) { var json = JSON.parse(data); json.push(obj); fs.writeFile("storage.json", JSON.stringify(json), function (err) { if (err) throw err; console.log('The "data to append" was appended to file!'); }); }); }almacenamiento.json contiene:
{"column":"0:lubbock:LW2-4$","ppas":[{"ppa":50000,"url":"/"},{"ppa":51724.137931034486,"url":"/lubbock"}]}cuando ejecuto el programa me sale:
json.push(obj); ^ TypeError: json.push is not a function at /home/....functions.js:5:10Puedo ver eso, el problema es que estoy tratando de almacenar el elemento en storage.json es un objeto en cadena, no una matriz de objetos en cadena.
¿Cómo configuro el proyecto para que el primer objeto cree una matriz (como si storage.json no existiera) y los objetos posteriores se agreguen a la matriz? ¿Hay un enfoque de uso común para esto?
Está tratando de insertar elementos en un objeto, no en una matriz
Su código convierte correctamente la cadena en un object javascript, pero no puede push() porque los objetos no son matrices * y no tienen un método push() . Sin embargo, su objeto contiene una matriz de ppas.
No dice qué "matriz" realmente quiere, o qué se supone que debe contener, así que aquí hay algunas conjeturas:
Si está tratando de agregar objetos ppa a la matriz "ppa", debe presionar eso en su lugar: reemplace json.push(obj) con json.ppas.push(obj) . No nos muestra de dónde proviene la variable ppa en la primera línea, pero también debe ser una matriz.
Si está tratando de agregar otro objeto único que no sea ppa al objeto json raíz, debe colocarlo bajo una clave diferente: cambie addToStorage(obj) a addToStorage(key, obj) , donde key es una cadena y agregue con json[key] = obj .
* Sin embargo, las matrices son objetos