Question Comment analyser JSON en utilisant Node.js?


Comment dois-je analyser JSON en utilisant Node.js? Y at-il un module qui va valider et analyser JSON en toute sécurité?


852
2018-04-20 07:10


origine


Réponses:


Vous pouvez simplement utiliser JSON.parse.

node.js est construit sur V8, qui fournit l'objet global JSON[docs]. La définition du JSON objet fait partie de la spécification ECMAScript 5.

Remarque - JSON.parse peut attacher le fil actuel parce que c'est une méthode synchrone. Donc, si vous prévoyez d'analyser de gros objets JSON, utilisez un analyseur JSON en streaming.


990
2018-04-20 07:13



vous pouvez exiger Fichiers .json.

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

Par exemple si vous avez un config.json fichier dans le même répertoire que votre fichier de code source que vous utiliseriez:

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

ou (l'extension de fichier peut être omise):

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

Notez que require est synchrone et ne lit que le fichier une fois que, les appels suivants retournent le résultat du cache

Notez également que vous ne devez l'utiliser que pour les fichiers locaux sous votre contrôle absolu, car il exécute potentiellement du code dans le fichier.


621
2018-03-21 12:46



Vous pouvez utiliser JSON.parse().

Vous devriez pouvoir utiliser le JSON objet sur tout ECMAScript 5 implémentation JavaScript compatible. Et V8, sur lequel Node.js est construit est l'un d'entre eux.


Analyse d'une chaîne contenant des données JSON

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

Analyser un fichier contenant des données JSON

Vous devrez faire quelques opérations de fichiers avec fs module.

Version asynchrone

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);
});

Version synchrone

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

Tu veux utiliser require? Réfléchis encore!

Vous pouvez parfois utiliser require:

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

Mais, je ne le recommande pas pour plusieurs raisons:

Remarque: Si vous utilisez un fichier JSON pour stocker des informations sensibles (par exemple, des mots de passe), c'est la mauvaise façon de procéder. Voyez comment Heroku le fait: https://devcenter.heroku.com/articles/config-vars#setting-up-config-vars-for-a-deployed-application. Découvrez comment votre plate-forme le fait et utilisez process.env récupérer les variables de configuration à partir du code.

  1. require est synchrone. Si vous avez un très gros fichier JSON, il va étouffer votre boucle d'événements. Vous avez vraiment besoin d'utiliser JSON.parse avec fs.readFile.
  2. require va lire le fichier juste une fois. Appels ultérieurs à require pour le même fichier retournera une copie en cache. Pas une bonne idée si vous voulez lire un .json fichier qui est continuellement mis à jour. Vous pourriez utiliser un hack. Mais à ce stade, il est plus facile d'utiliser simplement fs.
  3. Si votre fichier n'a pas de .json extension, require ne traitera pas le contenu du fichier comme JSON.

Sérieusement! Utilisation JSON.parse.


jsonfile module

Si vous lisez un grand nombre de .json fichiers, (et si vous êtes extrêmement paresseux), il devient ennuyeux d'écrire le code de passe-partout à chaque fois. Vous pouvez enregistrer des caractères en utilisant le jsonfile module.

var jf = require('jsonfile');

Version asynchrone

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

Version synchrone

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

Analyse de JSON à partir de flux

Si le contenu JSON est diffusé sur le réseau, vous devez utiliser un analyseur JSON en continu. Sinon, il bloquera votre processeur et étouffera votre boucle d'événements jusqu'à ce que le contenu JSON soit entièrement diffusé.

Il y a beaucoup de paquets disponibles dans NPM pour ça. Choisissez ce qui est le mieux pour vous.


Gestion des erreurs / sécurité

Si vous ne savez pas si ce qui est passé à JSON.parse() est JSON valide, assurez-vous de joindre l'appel à JSON.parse() à l'intérieur try/catch bloc. Une chaîne JSON fournie par l'utilisateur peut provoquer le blocage de votre application et même entraîner des failles de sécurité. Assurez-vous que la gestion des erreurs est effectuée si vous parsiez JSON fourni en externe.


279
2017-09-07 13:35



Utilisez le Objet JSON:

JSON.parse(str);

78
2018-04-20 07:13



Un autre exemple 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



Je voudrais mentionner qu'il existe des alternatives à l'objet JSON global. JSON.parse et JSON.stringify sont tous les deux synchrones, donc si vous voulez faire face à de gros objets, vous pouvez vouloir vérifier certains des modules JSON asynchrones.

Regarde: https://github.com/joyent/node/wiki/Modules#wiki-parsers-json


32
2017-08-27 07:45



Inclure le node-fs bibliothèque.

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

Pour plus d'informations sur la bibliothèque 'fs', reportez-vous à la documentation http://nodejs.org/api/fs.html


28
2018-04-03 11:15



Puisque vous ne savez pas que votre chaîne est réellement valide, je la mettrais d'abord dans une prise d'essai. De plus, puisque les blocs de catch try ne sont pas optimisés par node, je mettrais le tout dans une autre fonction:

function tryParseJson(str) {
    try {
        return JSON.parse(str);
    } catch (ex) {
        return null;
    }
}

OU en "style asynchrone"

function tryParseJson(str, callback) {
    process.nextTick(function () {
      try {
          callback(null, JSON.parse(str));
      } catch (ex) {
          callback(ex)
      }
    })
}

9
2017-07-26 16:48



Analyser un flux JSON? Utilisation JSONStream.

var request = require('request')
  , JSONStream = require('JSONStream')

request({url: 'http://isaacs.couchone.com/registry/_all_docs'})
    .pipe(JSONStream.parse('rows.*'))
    .pipe(es.mapSync(function (data) {
      return data
    }))

https://github.com/dominictarr/JSONStream


8
2017-07-10 09:54



JSON.parse("your string");

C'est tout.


7
2018-06-12 06:47