Comment demander et traiter JSON avec python?

91

J'essaie d'envoyer une requête GET à une URL dont je sais qu'elle renvoie des données sous la forme de JSON en utilisant python.

Je voudrais savoir comment envoyer cette requête à http://someurl/path/to/json, et comment l'analyser - de préférence à un dict python.

sa125
la source
2
puis-je vous demander de remplacer votre réponse acceptée par celle qui utilise les requêtes?
webjunkie
Bien sûr, c'est comme ça que je le ferais aujourd'hui :)
sa125

Réponses:

130

Pour tout ce qui concerne les demandes d'URL, vous voudrez peut-être consulter les demandes . Pour JSON en particulier:

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...
webjunkie
la source
1
l'exécuter avec $ python GetJson.py ne donne aucune réponse mais la même chose lorsqu'il est exécuté un par un sur python CLI fonctionne bien.toute erreur que j'ai faite en le mettant dans un .py? (ma noob en python)
prieragupd
1
Le problème que j'ai avec cela, c'est que les sérialiseurs DjangoRestFramework n'acceptent pas cela comme json valide, en raison du préfixe «u» avant les clés.
wobbily_col
2
@PrayagUpd ancien, et vous l'avez probablement découvert, mais pour quiconque s'interroge à ce sujet: dans un .pyfichier, vous devez print(r.json())voir la réponse.
Antti Haapala
73

La bibliothèque standard de Python a jsonet urllib2modules.

import json
import urllib2

data = json.load(urllib2.urlopen('http://someurl/path/to/json'))
SilentGhost
la source
21
C'est une vieille question, mais je voulais rejoindre webjunkie et souligner qu'en 2012 la bibliothèque Requests: HTTP for Humans est une réponse potentiellement préférable. docs.python-requests.org/en/latest
Peter Hanley
6
Vous devez absolument utiliser les requêtes.
hughdbrown
1
Mais cela reste utile si vous êtes coincé dans une organisation mal éclairée qui rend difficile le chargement de bibliothèques qui ne font pas partie de la bibliothèque standard
Thruston