Pretty-Print données JSON vers un fichier utilisant Python

un projet pour la classe implique l'analyse des données JSON Twitter. Je récupère les données et les place dans le fichier sans trop de problèmes, mais tout est en une ligne. C'est très 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 l'écriture de code pour la partie de manipulation de données très difficile.

est-ce que quelqu'un sait comment faire cela depuis Python (c.-à-d. ne pas utiliser l'outil en ligne de commande, ce que je ne peux pas obtenir de travail)? Voici mon code pour l'instant:

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()

Remarque: j'apprécie les gens m'indiquer simplejson documentation et, mais comme je l'ai dit, j'ai déjà regardé cela et continuer à avoir besoin d'aide. Une véritable réponse utile sera plus détaillée et explicite que les exemples qui s'y trouvent. Merci

Aussi: Essayez ceci dans la ligne de commande 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 bien les données que j'utilise, mais elles sont très grandes et vous avez déjà vu le code que j'ai utilisé pour créer le fichier.

41
demandé sur cricket_007 2012-02-07 06:37:47

5 réponses

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()
39
répondu mattbornski 2012-02-07 03:14:33

Vous pouvez analyser le JSON, puis le sortir à nouveau avec des indents 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'information.

36
répondu dkamins 2012-02-07 21:45:25
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 json.dumps() si vous ne voulez pas analyser la chaîne plus tard, utilisez simplement json.dump(). C'est plus rapide aussi.

13
répondu Andras Dosztal 2018-01-28 12:13:37

Vous pouvez utiliser json module de python à pretty print.

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

Donc, dans votre cas

>>> print json.dumps(json_output, indent=4)
11
répondu RanRag 2012-02-07 02:42:56

Vous pouvez rediriger un fichier vers python et l'ouvrir en utilisant l'outil et pour le lire utilisez-le plus.

L'exemple de code sera,

cat filename.json | python -m json.tool | more
-3
répondu Ramya 2018-08-28 04:48:34