79 votes

Écrire du JSON formaté en Node.js

J'utilise Node.js pour POST JSON à PostBin mais les données sont mal formatées (comme vous pouvez le voir ici) : http://www.postbin.org/1cpndqw ).

Voici le code que j'utilise pour tesT :

var http = require('http');

var options = {
  host: 'www.postbin.org',
  port: 80,
  path: '/1cpndqw',
  method: 'POST'
};

var req = http.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.write(JSON.stringify({ a:1, b:2, c:3 }, null, 4));
req.end();

345voto

Peter Lyons Points 47794

Utilisez JSON.stringify(object, null, 4) donde 4 est le nombre d'espaces à utiliser comme unité d'indentation. Vous pouvez également utiliser "\t" si vous voulez des onglets. C'est en fait partie de la spécification ECMAScript 5 et est documenté sur MDN .

10voto

Charlie Martin Points 62306

Eh bien, principalement parce que JSON ne se soucie pas de la façon dont il est formaté, et que vous ne faites pas de formatage vous-même. Ce dont vous avez besoin est un javascript prettyprinter, si vous vous en souciez, mais la première question est "Pourquoi vous en souciez-vous ?"

Voici un prettyprinting à partir des recettes Javascript.

En fait, il y a tout un tas d'exemples différents. aquí sur SO.

UPDATE

Ok, donc maintenant qu'il fait ce que vous voulez, demandons nous si vous faites la bonne chose. Comme plusieurs personnes l'ont souligné, il n'est pas nécessaire de transmettre ces nouvelles lignes, ces tabulations ou ces espaces supplémentaires ; le coût d'efficacité est faible, probablement de l'ordre de 2 à 5 %, mais on ne sait jamais quand on peut avoir besoin de quelques pour cent.

D'un autre côté, je suis tout à fait d'accord pour dire qu'il est beaucoup plus pratique de pouvoir lire la sortie JSON sous la forme d'un joli texte imprimé. Mais il y a une autre solution : vous utilisez probablement un navigateur pour consulter ces résultats, alors au lieu de les imprimer pour les transmettre, utilisez une imprimante côté client. J'utilise JSONView pour Chrome y JSONView dans Firefox. De nombreux débogueurs imprimeront également les résultats JSON pour vous.

7voto

Fritz Dodoo Points 86

J'ai utilisé un processus en deux étapes qui s'est avéré efficace :

var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")

2voto

Dave Dopson Points 16690

Vous devriez vérifier underscore-cli - c'est un outil en ligne de commande pour inspecter et traiter les données JSON.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X