Question Comment faire un joli fichier JSON?


J'ai un fichier JSON qui est un désordre que je veux jolimer - quelle est la façon la plus simple de le faire en python? Je sais que PrettyPrint prend un "objet", ce que je pense peut être un fichier, mais je ne sais pas comment passer un fichier - juste en utilisant le nom de fichier ne fonctionne pas.


585
2017-10-17 21:38


origine


Réponses:


le json module déjà implémente une jolie impression de base avec le indent paramètre:

>>> import json
>>>
>>> your_json = '["foo", {"bar":["baz", null, 1.0, 2]}]'
>>> parsed = json.loads(your_json)
>>> print json.dumps(parsed, indent=4, sort_keys=True)
[
    "foo", 
    {
        "bar": [
            "baz", 
            null, 
            1.0, 
            2
        ]
    }
]

Pour analyser un fichier, utilisez json.load:

with open('filename.txt', 'r') as handle:
    parsed = json.load(handle)

942
2017-10-17 21:54



Vous pouvez le faire sur la ligne de commande:

cat some.json | python -m json.tool

(comme déjà mentionné dans les commentaires à la question).

En fait, python n'est pas mon outil favori en ce qui concerne le traitement json sur la ligne de commande. Pour une simple impression, c'est bien, mais si vous voulez manipuler le json, cela peut devenir trop compliqué. Vous aurez bientôt besoin d'écrire un script-fichier séparé, vous pourriez vous retrouver avec des cartes dont vous avez les clés «unicode» (python unicode), ce qui rend la sélection des champs plus difficile et ne va pas vraiment dans le sens de jolie -impression.

j'utilise jq. Ce qui précède peut être fait avec:

cat some.json | jq ''

et vous obtenez des couleurs en bonus (et une extension plus facile).


184
2017-08-26 13:42



Pygmentize + Python json.tool = Jolie impression avec surlignement de syntaxe

Pygmentize est un outil de tueur. Regarde ça.

Je combine python json.tool avec pygmentize

echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json

Voir le lien ci-dessus pour l'instruction d'installation de pygmentize.

Une démo de ceci est dans l'image ci-dessous:

demo


37
2017-08-27 10:30



Utilisez cette fonction et ne vous inquiétez pas si votre JSON est un str ou dict encore une fois - il suffit de regarder la jolie impression:

import json

def pp_json(json_thing, sort=True, indents=4):
    if type(json_thing) is str:
        print(json.dumps(json.loads(json_thing), sort_keys=sort, indent=indents))
    else:
        print(json.dumps(json_thing, sort_keys=sort, indent=indents))
    return None

pp_json(your_json_string_or_dict)

29
2018-06-10 21:25



Vous pourriez utiliser pprint.

Comment lire le fichier avec des données json et l'imprimer.

import json
import pprint

with open('filename.txt', 'r') as f:
    data = f.read()
    json_data = json.loads(data)

pprint.pprint(json_data)

15
2018-01-05 10:12



Pour pouvoir imprimer à partir de la ligne de commande et pouvoir contrôler l'indentation etc., vous pouvez créer un alias similaire à celui-ci:

alias jsonpp="python -c 'import sys, json; print json.dumps(json.load(sys.stdin), sort_keys=True, indent=2)'"

Et puis utilisez l'alias de l'une des manières suivantes:

cat myfile.json | jsonpp
jsonpp < myfile.json

8
2018-03-28 14:58



Voici un exemple simple d'impression JSON sur la console d'une manière sympa en Python, sans que le JSON soit sur votre ordinateur en tant que fichier local:

import pprint
import json 
from urllib.request import urlopen # (Only used to get this example)

# Getting a JSON example for this example 
r = urlopen("https://mdn.github.io/fetch-examples/fetch-json/products.json")
text = r.read() 

# To print it
pprint.pprint(json.loads(text))

4
2018-01-23 08:19