J'ai un fichier JSON qui est un gâchis que je veux joli print-- quelle est la façon la plus simple de le faire en python? Je sais que PrettyPrint prend un "objet", qui je pense peut être un fichier, mais je ne sais pas comment passer un fichier - simplement utiliser le nom de fichier ne fonctionne pas.
python
json
formatting
pretty-print
Colleen
la source
la source
json.loads()
et d'imprimer le dictionnaire résultant. Ou passez simplement à la section Pretty printing de la documentationjson
Python pour .<your_file.js python -mjson.tool
comme dans le lien de @ ed?Réponses:
Le
json
module implémente déjà une jolie impression de base avec leindent
paramètre:Pour analyser un fichier, utilisez
json.load()
:la source
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
sinon cela m'a juste montré une chaîne échappéeVous pouvez le faire sur la ligne de commande:
(comme déjà mentionné dans les commentaires de la question, merci à @Kai Petzke pour la suggestion python3).
En fait, python n'est pas mon outil préféré en ce qui concerne le traitement json sur la ligne de commande. Pour une jolie impression simple, c'est ok, mais si vous voulez manipuler le json, cela peut devenir trop compliqué. Vous auriez bientôt besoin d'écrire un fichier de script séparé, vous pourriez vous retrouver avec des cartes dont les clés sont u "some-key" (python unicode), ce qui rend la sélection des champs plus difficile et ne va pas vraiment dans le sens de pretty -impression.
Vous pouvez également utiliser jq :
et vous obtenez des couleurs en prime (et une extensibilité beaucoup plus facile).
Addendum: Il y a une certaine confusion dans les commentaires concernant l'utilisation de jq pour traiter de gros fichiers JSON d'une part, et avoir un très gros programme jq d'autre part. Pour la jolie impression d'un fichier composé d'une seule grande entité JSON, la limitation pratique est la RAM. Pour la jolie impression d'un fichier de 2 Go composé d'un seul tableau de données du monde réel, la «taille maximale de l'ensemble résident» requise pour la jolie impression était de 5 Go (que ce soit en utilisant jq 1.5 ou 1.6). Notez également que jq peut être utilisé depuis Python après
pip install jq
.la source
jq '' < some.json
python3 -m json.tool <IN >OUT
, car cela conserve l'ordre d'origine des champs dans les dictons JSON. L'interpréteur python version 2 trie les champs par ordre alphabétique croissant, ce qui n'est souvent pas ce que vous voulez.Vous pouvez utiliser l' empreinte du module intégré (https://docs.python.org/3.6/library/pprint.html) .
Comment lire le fichier avec les données json et l'imprimer.
la source
Pygmentize + Python json.tool = Jolie impression avec mise en évidence de la syntaxe
Pygmentize est un outil tueur. Regarde ça.
Je combine python json.tool avec pygmentize
Voir le lien ci-dessus pour les instructions d'installation de pygmentize.
Une démonstration de ceci est dans l'image ci-dessous:
la source
-g
ne fonctionne pas réellement;) Étant donné que l'entrée provient de stdin, pygmentize n'est pas en mesure de faire une bonne supposition. Vous devez spécifier explicitement lexer:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
Utilisez cette fonction et ne vous inquiétez pas d'avoir à vous rappeler si votre JSON est un
str
oudict
encore - regardez simplement la jolie impression:la source
J'ai écrit une fois une
prettyjson()
fonction pour produire une sortie agréable à regarder. Vous pouvez récupérer l'implémentation de ce dépôt .La principale caractéristique de cette fonction est qu'elle essaie de conserver les éléments dict et list dans une seule ligne jusqu'à ce qu'un certain
maxlinelength
soit atteint. Cela produit moins de lignes de JSON, la sortie semble plus compacte et plus facile à lire.Vous pouvez produire ce type de sortie par exemple:
UPD Dec'19: j'ai placé le code dans un dépôt séparé , corrigé quelques bugs et fait quelques autres ajustements.
la source
Pour pouvoir imprimer à partir de la ligne de commande et pouvoir contrôler l'indentation, etc., vous pouvez configurer un alias similaire à celui-ci:
Et puis utilisez l'alias de l'une des manières suivantes:
la source
Utilisez pprint: https://docs.python.org/3.6/library/pprint.html
print()
par rapport àpprint.pprint()
la source
pprint
ne produit pas de document JSON valide.Voici un exemple simple de jolie impression JSON sur la console d'une manière agréable en Python, sans exiger que le JSON soit sur votre ordinateur en tant que fichier local:
la source
Il fonctionne pour l'afficher ou l'enregistrer dans un fichier.
la source
Je pense que c'est mieux d'analyser le json avant, pour éviter les erreurs:
la source
Vous pouvez essayer pprintjson .
Installation
Usage
Imprimez JSON à partir d'un fichier à l'aide de la CLI pprintjson.
Jolie impression JSON à partir d'un stdin en utilisant la CLI pprintjson.
Jolie impression JSON à partir d'une chaîne à l'aide de la CLI pprintjson.
Jolie impression JSON à partir d'une chaîne avec un retrait de 1.
Imprimez JSON à partir d'une chaîne et enregistrez la sortie dans un fichier output.json.
Production
la source
C'est loin d'être parfait, mais ça fait l'affaire.
vous pouvez l'améliorer, ajouter un retrait et ainsi de suite, mais si vous voulez juste pouvoir lire un json plus propre, c'est la voie à suivre.
la source