¿Cómo solicito y proceso JSON con python?


91

Estoy tratando de enviar una solicitud GET a una URL que sé que devuelve datos en forma de JSON usando python.

Me gustaría saber cómo enviar esta solicitud http://someurl/path/to/jsony cómo analizarla, preferiblemente a un dictado de Python.


2
¿Puedo pedirle que cambie su respuesta aceptada por la que usa solicitudes?
webjunkie

Claro, así es como lo haría hoy :)
sa125

Respuestas:


130

Para cualquier cosa con solicitudes a URL, es posible que desee consultar las solicitudes . Para JSON en particular:

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

1
ejecutarlo con $ python GetJson.py no da ninguna respuesta, pero lo mismo cuando se ejecuta uno por uno en Python CLI funciona bien. ¿Algún error que cometí al ponerlo en un .py? (ma noob en python)
prayagupd

1
El problema que tengo con esto es que los serializadores DjangoRestFramework no lo aceptan como json válido, debido al prefijo 'u' antes de las claves.
wobbily_col

2
@PrayagUpd antiguo, y probablemente lo descubrió, pero para cualquier otra persona que se lo pregunte: en un .pyarchivo, debe print(r.json())ver la respuesta.
Antti Haapala

73

La biblioteca estándar de Python tiene jsony urllib2módulos.

import json
import urllib2

data = json.load(urllib2.urlopen('http://someurl/path/to/json'))

21
Esta es una pregunta antigua, pero quería unirme a webjunkie y señalar que en 2012 la biblioteca Solicitudes: HTTP para humanos es una respuesta potencialmente preferible. docs.python-requests.org/en/latest
Peter Hanley

6
Definitivamente deberías usar solicitudes.
hughdbrown

1
Pero esto sigue siendo útil si está atrapado en una organización ignorante que dificulta la carga de bibliotecas que no forman parte de la biblioteca estándar
Thruston
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.