¿Cómo puedo realizar una impresión bonita de JSON utilizando node.js?
(4)
Esto parece un problema resuelto pero no puedo encontrar una solución para él.
Básicamente, leo un archivo JSON, cambio una clave y vuelvo a escribir el nuevo JSON en el mismo archivo. Todo funciona, pero pierdo el formato JSON. Entonces, en lugar de:
{
name:''test'',
version:''1.0''
}
yo obtengo
{name:''test'',version:''1.1''}
¿Hay alguna forma en Node.js de escribir JSON bien formateado en un archivo?
Creo que esto podría ser útil ... Me encanta el código de ejemplo :)
var fs = require(''fs'');
var myData = {
name:''test'',
version:''1.0''
}
var outputFilename = ''/tmp/my.json'';
fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
if(err) {
console.log(err);
} else {
console.log("JSON saved to " + outputFilename);
}
});
El tercer parámetro de JSON.stringify
define la inserción de espacios en blanco para impresión bonita. Puede ser una cadena o un número (número de espacios). El nodo puede escribir en su sistema de archivos con fs
. Ejemplo:
var fs = require(''fs'');
fs.writeFile(''test.json'', JSON.stringify({ a:1, b:2, c:3 }, null, 4));
/* test.json:
{
"a": 1,
"b": 2,
"c": 3,
}
*/
Consulte los documentos JSON.stringify () en MDN , Node fs docs
Si no desea almacenar esto en cualquier lugar, solo vea el objeto con fines de depuración.
console.log(JSON.stringify(object, null, " "));
Puede cambiar el tercer parámetro para ajustar la sangría.
Si solo desea imprimir un objeto y no exportarlo como JSON válido, puede usar console.dir()
.
Utiliza resaltado de sintaxis, sangría inteligente, elimina las comillas de las teclas y simplemente hace que la salida sea lo más bonita posible.
const jsonString = `{"name":"John","color":"green",
"smoker":false,"id":7,"city":"Berlin"}`
const object = JSON.parse(jsonString)
console.dir(object, {depth: null, colors: true})
Debajo del capó es un acceso directo para console.log(util.inspect(…))
. La única diferencia es que omite cualquier función personalizada inspect()
definida en un objeto.