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.


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/...

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.