Ecrire JSON formaté dans le noeud.js

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

C'est le code que j'utilise pour le 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();
79
demandé sur donald 2011-04-17 18:11:37

4 réponses

Eh bien, principalement parce que JSON ne se soucie pas comment il est formaté, et vous ne faites pas tout formatage vous-même. Ce que vous avez besoin est un javascript prettyprinter, si vous l'aimez, mais la première question est "Pourquoi s'en faire?"

voici un prettyprinting code des recettes Javascript.

en fait il y a un tas d'exemples différents ici sur SO.

Mise à jour

Ok, donc maintenant il fait ce que vous voulez, demandons si vous faites la bonne chose. Comme plusieurs personnes l'ont souligné, vous n'avez pas besoin de transmettre ces nouvelles et onglets supplémentaires, ou des espaces; le coût de l'efficacité est faible, probablement dans le voisinage de 2-5 pour cent, mais vous ne savez jamais quand vous pourriez avoir besoin d'un couple pour cent.

d'un autre côté, je suis tout à fait d'accord qu'il est beaucoup plus pratique de pouvoir lire la sortie JSON comme prettyprinted texte. Mais il y a une autre solution -- vous utilisez probablement encore un navigateur pour regarder ces résultats, donc au lieu de le préimprimer pour la transmission, utilisez un préimprimeur côté client. J'utilise JSONView pour Chrome et Jsonview dans Firefox. De nombreux débogueurs vont également préimprimer les résultats JSON pour vous aussi.

10
répondu Charlie Martin 2017-05-23 12:25:45

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

345
répondu Peter Lyons 2014-10-17 11:46:15

j'ai utilisé un processus en deux étapes que j'ai trouvé à travailler:

var output = JSON.parse(insert_json_here);
var print_to_file = JSON.stringify(output, null, "\t")
6
répondu Fritz Dodoo 2017-03-29 20:18:27

Vous devriez vérifier soulignent-cli - c'est un outil de ligne de commande pour l'inspection et le traitement des données JSON.

2
répondu Dave Dopson 2012-04-29 21:20:57