3422 votes

Comment puis-je faire une jolie impression de JSON ?

Existe-t-il un shell (unix) script pour formater JSON dans un format lisible par l'homme ?

En gros, je veux qu'il transforme ce qui suit :

{ foo: "lorem", bar: "ipsum" }

... en quelque chose comme ça :

{
    foo: "lorem",
    bar: "ipsum"
}

4914voto

B Bycroft Points 3551

Avec Python 2.6+, vous pouvez simplement faire :

echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool

401voto

Somu Points 843

J'utilise l'argument "espace" de JSON.stringify pour imprimer JSON en javascript.

Exemples :

// Indent with 4 spaces
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, 4);

// Indent with tabs
JSON.stringify({"foo":"lorem","bar":"ipsum"}, null, '\t');

Depuis la ligne de commande Unix avec nodejs, en spécifiant json sur la ligne de commande :

$ node -e "console.log(JSON.stringify(JSON.parse(process.argv[1]), null, '\t'));" \
  '{"foo":"lorem","bar":"ipsum"}'

Les retours :

{
    "foo": "lorem",
    "bar": "ipsum"
}

Depuis la ligne de commande Unix avec nodejs, en spécifiant un nom de fichier qui contient json, et en utilisant une indentation de 4 espaces :

$ node -e "console.log(JSON.stringify(JSON.parse(require('fs') \
      .readFileSync(process.argv[1])), null, 4));"  filename.json

350voto

Dave Dopson Points 16690

J'ai écrit un outil qui possède l'un des meilleurs formateurs d'"espaces blancs intelligents" disponibles. Il produit une sortie plus lisible et moins verbeuse que la plupart des autres options proposées ici.

underscore-cli

Voilà à quoi ressemble un "espace blanc intelligent" :

Je suis peut-être un peu partial, mais c'est un outil génial pour imprimer et manipuler des données JSON à partir de la ligne de commande. Il est très facile à utiliser et dispose d'une aide/documentation en ligne de commande très complète. C'est un couteau de poche que j'utilise pour 1001 petites tâches différentes qui seraient étonnamment ennuyeuses à faire autrement. Dernier cas d'utilisation : Chrome, Dev console, onglet Network, exporter tout comme fichier HAR, "cat site.har | underscore select '.url' --outfmt text | grep mydomain" ; maintenant j'ai une liste chronologiquement ordonnée de toutes les recherches d'url faites pendant le chargement du site de ma société.

L'impression est facile :

underscore -i data.json print

même chose :

cat data.json | underscore print

même chose, plus explicite :

cat data.json | underscore print --outfmt pretty

Cet outil est mon projet de passion actuel, donc si vous avez des demandes de fonctionnalités, il y a de bonnes chances que je les aborde.

94voto

Grâce aux indications très utiles de J.F. Sebastian, voici un script légèrement amélioré que j'ai mis au point :

#!/usr/bin/python

"""
Convert JSON data to human-readable form.

Usage:
  prettyJSON.py inputFile [outputFile]
"""

import sys
import simplejson as json

def main(args):
    try:
        inputFile = open(args[1])
        input = json.load(inputFile)
        inputFile.close()
    except IndexError:
        usage()
        return False
    if len(args) < 3:
        print json.dumps(input, sort_keys = False, indent = 4)
    else:
        outputFile = open(args[2], "w")
        json.dump(input, outputFile, sort_keys = False, indent = 4)
        outputFile.close()
    return True

def usage():
    print __doc__

if __name__ == "__main__":
    sys.exit(not main(sys.argv))

67voto

Paul Horsfall Points 3612

La gemme Ruby JSON est accompagnée d'un shell script qui permet d'embellir JSON :

sudo gem install json
echo '{ "foo": "bar" }' | prettify_json.rb

script télécharger : gist.github.com/3738968

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