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"
}
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"
}
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
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.
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.
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))
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 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.