javascript - parse - read json file nodejs
escribir/agregar datos en un archivo JSON usando node.js (7)
El ejemplo anterior también es correcto, pero proporciono un ejemplo simple:
var fs = require("fs");
var sampleObject = {
name: ''pankaj'',
member: ''stack'',
type: {
x: 11,
y: 22
}
};
fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
if (err) {
console.error(err);
return;
};
console.log("File has been created");
});
Estoy tratando de escribir un archivo JSON usando el nodo de datos de bucle, por ejemplo
var jsonfile = require(''jsonfile'');
for (i=0; i <11 ; i++){
jsonfile.writeFile(''loop.json'', "id :" + i + " square :" + i*i);
}
outPut in loop.json es
id :1 square : 1
pero quiero un archivo de salida como este (a continuación) y también si ejecuto ese código nuevamente, debería agregar 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 usar el mismo archivo que creé la primera vez, pero cada vez que ejecuto ese código, deben agregarse nuevos elementos en ese mismo archivo
var fs = require(''fs'');
var 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});
}
var 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});
}
var json = JSON.stringify(obj);
fs.writeFile(''myjsonfile.json'', json);
}
});
Para aproximación sincrónica
fs.writeFileSync(''file.json'', JSON.stringify(jsonVariable));
Para formatear jsonfile da la opción de
spaces
que puede pasar como parámetro:
jsonfile.writeFile(file, obj, {spaces: 2}, function (err) {
console.error(err);
})
O use
jsonfile.spaces = 4
.
Lea los detalles
jsonfile
.
No sugeriría escribir en el archivo cada vez en el bucle, en su lugar construya el objeto JSON en el bucle y escriba en el archivo fuera del bucle.
var jsonfile = require(''jsonfile'');
var obj={
''table'':[]
};
for (i=0; i <11 ; i++){
obj.table.push({"id":i,"square":i*i});
}
jsonfile.writeFile(''loop.json'', obj, {spaces:2}, function(err){
console.log(err);
});
Por favor, intente el siguiente programa. Es posible que esté esperando 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, por ejemplo, square.js.
Luego ejecute el programa desde el símbolo del sistema utilizando el
node square.js
comando
node square.js
Lo que hace es, simplemente sobrescribir el archivo existente con un nuevo conjunto de datos, cada vez que ejecuta el comando.
Feliz codificación.
Si este archivo json no se vuelve demasiado grande con el tiempo, debería intentarlo:
-
Cree un objeto javascript con la matriz de la tabla.
var obj = { table: [] };
-
Agregue algunos datos como
obj.table.push({id: 1, square:2});
-
Conviértalo de un objeto a una cadena con stringify
var json = JSON.stringify(obj);
-
usa fs para escribir el archivo en el disco
var fs = require(''fs''); fs.writeFile(''myjsonfile.json'', json, ''utf8'', callback);
-
si desea agregarlo, lea el archivo json y conviértalo de nuevo en un objeto
fs.readFile(''myjsonfile.json'', ''utf8'', function readFileCallback(err, data){ if (err){ console.log(err); } else { obj = JSON.parse(data); //now it an object obj.table.push({id: 2, square:3}); //add some data json = JSON.stringify(obj); //convert it back to json fs.writeFile(''myjsonfile.json'', json, ''utf8'', callback); // write it back }});
Esto funcionará para datos de hasta 100 MB como máximo de manera efectiva. Sobre este límite, debe usar un motor de base de datos.
ACTUALIZAR:
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 verificar la existencia de un archivo llamado fs.stat (ruta, devolución de llamada). Con esto, puede verificar si el archivo existe. Si existe, use la función de lectura, si no es así, use la función de creación. Use la cadena de fecha como la ruta porque el archivo se nombrará como la fecha de hoy + .json. la devolución de llamada contendrá un objeto de estadísticas que será nulo si el archivo no existe.
debe leer el archivo cada vez que desee 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;
})
})
tratar
var fs = require("fs");
var sampleObject = { your data };
fs.writeFile("./object.json", JSON.stringify(sampleObject, null, 4), (err) => {
if (err) { console.error(err); return; };
console.log("File has been created");
});