web-dev-qa-db-fra.com

Ecrire JSON formaté dans Node.js

J'utilise Node.js pour POST JSON vers 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 tester:

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
donald

Eh bien, principalement parce que JSON ne tient pas compte de la façon dont il est formaté et que vous ne le faites pas vous-même. Ce dont vous avez besoin est une jolie imprimante javascript, si vous en tenez à vous, mais la première question est "Pourquoi vous en souciez-vous?"

Voici un code prettyprinting extrait des recettes Javascript.

En fait, il y a une foule d'exemples différents ici sur SO.

[~ # ~] met à jour [~ # ~]

Bon, alors maintenant, vous faites ce que vous voulez, demandons-nous si vous faites la bonne chose. Comme plusieurs personnes l'ont souligné, vous n'avez pas besoin de transmettre ces nouvelles lignes et ces onglets, ni ces espaces; le coût d'efficacité est faible, probablement entre 2 et 5%, mais vous ne savez jamais quand vous aurez besoin de quelques pour cent.

Par ailleurs, je suis tout à fait d’accord pour dire qu’il est beaucoup plus pratique de pouvoir lire la sortie JSON en tant que texte joliment imprimé. Mais il existe une autre solution: vous utilisez probablement toujours un navigateur pour examiner ces résultats. Par conséquent, au lieu de l’imprimer assez pour la transmission, utilisez une jolie imprimante côté client. J'utilise JSONView pour Chrome et JSONView dans Firefox. De nombreux débogueurs imprimeront également les résultats JSON pour vous.

10
Charlie Martin

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

345
Peter Lyons

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")
6
Fritz Dodoo

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

2
Dave Dopson