¿Cuál es la mejor manera de analizar una respuesta JSON desde la biblioteca de solicitudes?


266

Estoy usando el requestsmódulo de Python para enviar un RESTful GET a un servidor, para lo cual obtengo una respuesta en JSON. La respuesta JSON es básicamente solo una lista de listas.

¿Cuál es la mejor manera de forzar la respuesta a un objeto nativo de Python para que pueda iterarlo o imprimirlo usando pprint?

Respuestas:


307

Puedes usar json.loads:

import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)

Esto convierte una cadena dada en un diccionario que le permite acceder fácilmente a sus datos JSON dentro de su código.

O puede utilizar @ útil sugerencia de Martijn, y cuanto mayor sea votado respuesta, response.json().


3
ok genial, sin embargo, cada uno de los elementos seguiría siendo unicode.
— felix001 01 de

@ felix001: sí, aunque puede convertir cualquier información usando str(). Por otro lado, no es malo tener datos Unicode (en preparación para el futuro).
— Simeon Visser

162
Mucho, mucho mejor de usar response.json(), ya que hará un mejor trabajo al descubrir la codificación utilizada. (Descargo de responsabilidad, escribí algo de ese código).
— Martijn Pieters

@MartijnPieters: entonces, ¿cómo puedo usar las solicitudes json parser más adelante en un texto de la respuesta en memoria caché? es decir, tener la salida de response.text()?
— neurino

@MartijnPieters, encontrado:requests.compat.json.loads(resp_text)
— neurino

469

Como estás usando requests, debes usar el jsonmétodo de respuesta .

import requests

response = requests.get(...)
data = response.json()

Se detecta automáticamente que decodificador para uso .


2
Solo tenga en cuenta que ha aparecido en algún lugar entre v0.12 y v1.0, por lo que, por ejemplo, Ubuntu 12.04 deb-package para python-request aún no tiene esta función (es v0.8). Sin pip install requestsembargo, puede en lugar de usar el paquete deb.
— timurb

55
Tengo un poco de curiosidad por saber qué es ahora datauna lista de listas o un diccionario.
— Krishna Oza

66
@ Krishna_Oza datarefleja la estructura del JSON que está leyendo. Por ejemplo, si la respuesta es: [{"a": {...}}], dataes una lista, con list[0] == {'a': {...}}. Si la respuesta es {"a": "b", "c": "d"}, dataes un dict. Eso responde tu pregunta?
— pswaminathan

1
@CGFoX, ¿qué versión estás ejecutando? Todavía veo que la API funciona de la misma manera en la última versión:>>> import requests >>> r = requests.get('http://httpbin.org/get') >>> r.json <bound method Response.json of <Response [200]>> >>> r.json() {'args': {}, ...}
— pswaminathan

44
Voté a favor de esto porque usualmente estaba usando el método json.loads (response.text) hasta que en algunos json grandes descubrí que usar respons.json () era mucho más rápido que a la inversa.
— Paul R.
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.