Pregunta Cómo analizar JSON utilizando Node.js?


¿Cómo debo analizar JSON usando Node.js? ¿Hay algún módulo que valide y analice JSON de forma segura?


852
2018-04-20 07:10


origen


Respuestas:


Puedes simplemente usar JSON.parse.

node.js se basa en V8, que proporciona el objeto global JSON[docs]. La definición de JSON objeto es parte de la especificación ECMAScript 5.

Nota - JSON.parse puede atar el hilo actual porque es un método sincrónico. Entonces, si planea analizar grandes objetos JSON, use un analizador json de transmisión.


990
2018-04-20 07:13



usted puede exigir .json archivos.

var parsedJSON = require('./file-name');

Por ejemplo, si tienes un config.json archivo en el mismo directorio que el archivo de código fuente que usaría:

var config = require('./config.json');

o (la extensión del archivo puede ser omitida):

var config = require('./config');

tenga en cuenta que require es sincrónico y solo lee el archivo una vez, las siguientes llamadas devuelven el resultado de la memoria caché

También tenga en cuenta que solo debe usar esto para archivos locales bajo su control absoluto, ya que potencialmente ejecuta cualquier código dentro del archivo.


621
2018-03-21 12:46



Puedes usar JSON.parse().

Deberías poder usar el JSON objeto en cualquier ECMAScript 5 implementación de JavaScript compatible. Y V8, sobre el cual se construye Node.js es uno de ellos.


Analizando una cadena que contiene datos JSON

var str = '{ "name": "John Doe", "age": 42 }';
var obj = JSON.parse(str);

Analizando un archivo que contiene datos JSON

Tendrás que hacer algunas operaciones de archivo con fs módulo.

Versión asincrónica

var fs = require('fs');

fs.readFile('/path/to/file.json', 'utf8', function (err, data) {
    if (err) throw err; // we'll not consider error handling for now
    var obj = JSON.parse(data);
});

Versión sincrónica

var fs = require('fs');
var json = JSON.parse(fs.readFileSync('/path/to/file.json', 'utf8'));

Quieres usar require? ¡Piensa otra vez!

A veces puedes usar require:

var obj = require('path/to/file.json');

Pero, no lo recomiendo por varias razones:

Nota: Si está usando un archivo JSON para almacenar información confidencial (por ejemplo, contraseñas), esa es la manera incorrecta de hacerlo. Mira cómo lo hace Heroku: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application. Descubra cómo lo hace su plataforma y use process.env para recuperar los valores de configuración dentro del código.

  1. require es sincrónico Si tienes un archivo JSON muy grande, ahogará tu ciclo de eventos. Realmente necesitas usar JSON.parse con fs.readFile.
  2. require leerá el archivo sólo una vez. Llamadas subsecuentes a require para el mismo archivo devolverá una copia en caché. No es una buena idea si quieres leer un .json archivo que se actualiza continuamente. Podrías usar un truco. Pero en este punto, es más fácil simplemente usar fs.
  3. Si su archivo no tiene una .json extensión, require no tratará el contenido del archivo como JSON.

¡Seriamente! Utilizar JSON.parse.


jsonfile módulo

Si estás leyendo una gran cantidad de .json archivos, (y si es extremadamente vago), se vuelve molesto escribir código repetitivo todo el tiempo. Puede guardar algunos caracteres usando el jsonfile módulo.

var jf = require('jsonfile');

Versión asincrónica

jf.readFile('/path/to/file.json', function(err, obj) {
  // obj contains JSON data
});

Versión sincrónica

var obj = jf.readFileSync('/path/to/file.json');

Análisis de JSON de las secuencias

Si el contenido JSON se transmite por la red, debe usar un analizador JSON de transmisión. De lo contrario, atará tu procesador y estrangulará tu ciclo de eventos hasta que el contenido de JSON se transmita por completo.

Existen muchos paquetes disponibles en NPM para esto. Elija lo mejor para usted.


Manejo de errores / seguridad

Si no está seguro si lo que pasa se transfiere a JSON.parse() es JSON válido, asegúrese de adjuntar la llamada a JSON.parse() dentro de una try/catch bloquear. Una cadena JSON proporcionada por el usuario podría bloquear su aplicación e incluso podría ocasionar problemas de seguridad. Asegúrese de que el manejo de errores se realiza si analiza el JSON provisto externamente.


279
2017-09-07 13:35



utilizar el Objeto JSON:

JSON.parse(str);

78
2018-04-20 07:13



Otro ejemplo de JSON.parse:

var fs = require('fs');
var file = __dirname + '/config.json';

fs.readFile(file, 'utf8', function (err, data) {
  if (err) {
    console.log('Error: ' + err);
    return;
  }

  data = JSON.parse(data);

  console.dir(data);
});

33
2017-07-24 09:15



Me gustaría mencionar que hay alternativas al objeto JSON global. JSON.parse y JSON.stringify Ambos son síncronos, por lo que si desea tratar con objetos grandes, es posible que desee verificar algunos de los módulos JSON asíncronos.

Echar un vistazo: https://github.com/joyent/node/wiki/Modules#wiki-parsers-json


32
2017-08-27 07:45



Incluir la node-fs biblioteca.

var fs = require("fs");
var file = JSON.parse(fs.readFileSync("./PATH/data.json", "utf8"));

Para obtener más información sobre la biblioteca 'fs', consulte la documentación en http://nodejs.org/api/fs.html


28
2018-04-03 11:15