192 votes

Impression de données JSON dans un fichier à l'aide de Python

Un projet de classe consiste à analyser les données JSON de Twitter. J'obtiens les données et les place dans le fichier sans trop de problèmes, mais tout est sur une seule ligne. C'est bien pour la manipulation des 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 du code pour la partie manipulation des données très difficile.

Quelqu'un sait-il comment faire cela à partir de Python (c'est-à-dire sans utiliser l'outil de ligne de commande, que je n'arrive 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 l'on m'indique la documentation de Simplejson et autres, mais comme je l'ai dit, je l'ai déjà examinée et j'ai toujours besoin d'aide. Une réponse vraiment utile sera plus détaillée et explicative que les exemples trouvés ici. Merci

Aussi : J'essaie ceci dans la ligne de commande de Windows :

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

résulte en 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 volumineuses et vous avez déjà vu le code que j'ai utilisé pour créer le fichier.

163voto

mattbornski Points 2226

Vous devez utiliser l'argument facultatif indent .

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

126voto

dkamins Points 10565

Vous pouvez analyser le JSON, puis l'éditer à nouveau avec des indentations 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.

113voto

Andras Dosztal Points 881
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 aussi plus rapide.

16voto

RanRag Points 9395

Vous pouvez utiliser json de python pour faire une belle impression.

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

9voto

Praveen S N Points 61

Si vous générez un nouveau fichier *.json ou modifiez un fichier josn existant, utilisez le paramètre "indent" pour obtenir un joli format json.

import json
responseData = json.loads(output)
with open('twitterData.json','w') as twitterDataFile:    
    json.dump(responseData, twitterDataFile, indent=4)

Prograide.com

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.

Powered by:

X