Estoy tratando de escribir un archivo JSON usando un nodo de datos de bucle, por ejemplo
let jsonFile = require('jsonfile');
for (i = 0; i < 11; i++) {
jsonFile.writeFile('loop.json', "id :" + i + " square :" + i * i);
}
outPut en loop.json es:
id :1 square : 1
pero quiero un archivo de salida como este (abajo) y también si ejecuto ese código de nuevo debería añadir esa nueva salida como elementos en el mismo archivo JSON existente:
{
"table":[
{
"Id ":1,
"square ":1
},
{
"Id ":2,
"square ":3
},
{
"Id ":3,
"square ":9
},
{
"Id ":4,
"square ":16
},
{
"Id ":5,
"square ":25
},
{
"Id ":6,
"square ":36
},
{
"Id ":7,
"square ":49
},
{
"Id ":8,
"square ":64
},
{
"Id ":9,
"square ":81
},
{
"Id ":10,
"square ":100
}
]
}
Quiero utilizar el mismo archivo que he creado la primera vez, pero cada vez que ejecute el código de los nuevos elementos deben agregar en ese mismo archivo
const fs = require('fs');
let obj = {
table: []
};
fs.exists('myjsonfile.json', function(exists) {
if (exists) {
console.log("yes file exists");
fs.readFile('myjsonfile.json', function readFileCallback(err, data) {
if (err) {
console.log(err);
} else {
obj = JSON.parse(data);
for (i = 0; i < 5; i++) {
obj.table.push({
id: i,
square: i * i
});
}
let json = JSON.stringify(obj);
fs.writeFile('myjsonfile.json', json);
}
});
} else {
console.log("file not exists");
for (i = 0; i < 5; i++) {
obj.table.push({
id: i,
square: i * i
});
}
let json = JSON.stringify(obj);
fs.writeFile('myjsonfile.json', json);
}
});
Si este archivo json no se hace demasiado grande con el tiempo debería intentarlo:
Crear un objeto javascript con la matriz de la tabla en él
var obj = {
tabla: []
};
Añade algunos datos como
obj.table.push({id: 1, square:2});
Convertirlo de objeto a cadena con stringify
var json = JSON.stringify(obj);
utilizar fs para escribir el archivo en el disco
var fs = require('fs');
fs.writeFile('myjsonfile.json', json, 'utf8', callback);
si quieres añadirlo lee el archivo json y conviértelo de nuevo en un objeto
fs.readFile('myjsonfile.json', 'utf8', function readFileCallback(err, data){
si (err){
console.log(err);
} else {
obj = JSON.parse(data); //ahora es un objeto
obj.table.push({id: 2, square:3}); //añade algunos datos
json = JSON.stringify(obj); //convertirlo de nuevo en json
fs.writeFile('myjsonfile.json', json, 'utf8', callback); //escribirlo de nuevo
}});
Esto funcionará para datos tan grandes como 100 MB como máximo de forma efectiva. Por encima de este límite, debe utilizar un motor de base de datos.
ACTUALIZACIÓN:
Cree una función que devuelva la fecha actual (año+mes+día) como una cadena. Cree el archivo llamado esta cadena + .json. el módulo fs tiene una función que puede comprobar la existencia del archivo llamada fs.stat(path, callback). Con esto, puedes comprobar si el archivo existe. Si existe, utilice la función de lectura, si no existe, utilice la función de creación. Utilice la cadena de fecha como la ruta porque el archivo se llamará como la fecha de hoy + .json. el callback contendrá un objeto stats que será nulo si el archivo no existe.
Por favor, pruebe el siguiente programa. Puede esperar esta salida.
var fs = require('fs');
var data = {}
data.table = []
for (i=0; i <26 ; i++){
var obj = {
id: i,
square: i * i
}
data.table.push(obj)
}
fs.writeFile ("input.json", JSON.stringify(data), function(err) {
if (err) throw err;
console.log('complete');
}
);
Guarde este programa en un archivo javascript, digamos, square.js.
A continuación, ejecute el programa desde el símbolo del sistema utilizando el comando node square.js
.
Lo que hace es, simplemente, sobrescribir el archivo existente con un nuevo conjunto de datos, cada vez que se ejecuta el comando.
Feliz Codificación.
debes leer el archivo, cada vez que quieras agregar una nueva propiedad al json, y luego agregar las nuevas propiedades
var fs = require('fs');
fs.readFile('data.json',function(err,content){
if(err) throw err;
var parseJson = JSON.parse(content);
for (i=0; i <11 ; i++){
parseJson.table.push({id:i, square:i*i})
}
fs.writeFile('data.json',JSON.stringify(parseJson),function(err){
if(err) throw err;
})
})