web-dev-qa-db-fra.com

Pretty-Print données JSON dans un fichier en utilisant Python

Un projet de classe implique l'analyse de données JSON Twitter. Je récupère les données et les mets dans le fichier sans trop de problèmes, mais tout est sur une seule ligne. C’est bien pour la manipulation de données que j’essaie de faire, mais le fichier est ridiculement difficile à lire et je ne peux pas l’examiner très bien, ce qui rend la rédaction de code pour la partie manipulation de données très difficile.

Est-ce que quelqu'un sait comment faire cela de l'intérieur Python (c'est-à-dire ne pas utiliser l'outil de ligne de commande, que je ne parviens pas à faire fonctionner))? Voici mon code jusqu'à présent:

header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "wb")
# magic happens here to make it pretty-printed
twitterDataFile.write(output)
twitterDataFile.close()

Note J'apprécie que les gens m'indiquent de la documentation simple, etc., mais comme je l'ai dit, j'ai déjà examiné la question et continue d'avoir besoin d'aide. Une réponse vraiment utile sera plus détaillée et explicative que les exemples qui y figurent. Merci

Aussi: Essayer ceci dans la ligne de commande de Windows:

more twitterData.json | python -mjson.tool > twitterData-pretty.json

résultats dans ceci:

Invalid control character at: line 1 column 65535 (char 65535)

Je vous donnerais les données que j'utilise, mais elles sont très volumineuses et vous avez déjà vu le code que j'ai utilisé pour créer le fichier.

78
Zelbinian
header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "w")
# magic happens here to make it pretty-printed
twitterDataFile.write(simplejson.dumps(simplejson.loads(output), indent=4, sort_keys=True))
twitterDataFile.close()
66
mattbornski

Vous pouvez analyser le JSON, puis le sortir à nouveau avec des retraits comme ceci:

import json
mydata = json.loads(output)
print json.dumps(mydata, indent=4)

Voir http://docs.python.org/library/json.html pour plus d'informations.

55
dkamins
import json

with open("twitterdata.json", "w") as Twitter_data_file:
    json.dump(output, Twitter_data_file, indent=4, sort_keys=True)

Vous n'avez pas besoin de json.dumps() si vous ne souhaitez pas analyser la chaîne ultérieurement, utilisez simplement json.dump(). C'est plus rapide aussi.

41
Andras Dosztal

Vous pouvez utiliser le module json de python pour imprimer joliment).

>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
{
    "4": 5,
    "6": 7
}

Donc, dans ton cas

>>> print json.dumps(json_output, indent=4)
14
RanRag

Si vous avez déjà des fichiers JSON existants que vous voulez mettre en forme, vous pouvez utiliser ceci:

    with open('twitterdata.json', 'r+') as f:
        data = json.load(f)
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()
3
locke14