usar tablas que para panda libreria leer hacer funciones documentacion datos consultas como comandos json api python-3.x dictionary urlopen

json - tablas - Análisis de la respuesta HTTP en Python



hacer un dataframe en python (4)

Esto ha sido resuelto.

Cuando imprimí response.read() noté que b estaba predefinido a la cadena (por ejemplo, b''{"a":1,.. ). La "b" significa bytes y sirve como una declaración para el tipo de objeto que está manejando. Como sabía que una cadena se podía convertir en un dict utilizando json.loads(''string'') , solo tenía que convertir el tipo de byte en un tipo de cadena. Hice esto al decodificar la respuesta a la decodificación de utf-8 decode(''utf-8'') . Una vez que estaba en un tipo de cadena, mi problema se resolvió y pude iterar fácilmente sobre el dict .

No sé si esta es la forma más rápida o más "pirónica" de escribir esto, ¡pero funciona y siempre hay tiempo más tarde de optimización y mejora! Código completo para mi solución:

from urllib.request import urlopen import json # Get the dataset url = ''http://www.quandl.com/api/v1/datasets/FRED/GDP.json'' response = urlopen(url) # Convert bytes to string type and string type to dict string = response.read().decode(''utf-8'') json_obj = json.loads(string) print(json_obj[''source_name'']) # prints the string with ''source_name'' key

Si alguien encuentra esto a través de Google, espero que esto ayude. El mejor consejo que puedo dar es, lea atentamente sus errores y preste mucha atención a la salida que recibe.

Quiero manipular la información en THIS url. Puedo abrirlo con éxito y leer su contenido. Pero lo que realmente quiero hacer es tirar todas las cosas que no quiero y manipular las cosas que quiero guardar.

¿Hay una manera de convertir la cadena en un dict para que pueda iterar sobre ella? ¿O simplemente tengo que analizarlo como está (tipo str)?

from urllib.request import urlopen url = ''http://www.quandl.com/api/v1/datasets/FRED/GDP.json'' response = urlopen(url) print(response.read()) # returns string with info


Supongo que las cosas han cambiado en Python 3.4. Esto funcionó para mí:

print("resp:" + json.dumps(resp.json()))


También puedes usar la biblioteca de peticiones de python en su lugar.

import requests url = ''http://www.quandl.com/api/v1/datasets/FRED/GDP.json'' response = requests.get(url) dict = response.json()

Ahora puedes manipular el "dict" como un diccionario de python.


json trabaja con texto Unicode en Python 3 (el formato JSON en sí está definido solo en términos de texto Unicode) y, por lo tanto, debe decodificar los bytes recibidos en la respuesta HTTP. r.headers.get_content_charset(''utf-8'') obtiene su codificación de caracteres:

#!/usr/bin/env python3 import io import json from urllib.request import urlopen with urlopen(''https://httpbin.org/get'') as r, / io.TextIOWrapper(r, encoding=r.headers.get_content_charset(''utf-8'')) as file: result = json.load(file) print(result[''headers''][''User-Agent''])

No es necesario usar io.TextIOWrapper aquí:

#!/usr/bin/env python3 import json from urllib.request import urlopen with urlopen(''https://httpbin.org/get'') as r: result = json.loads(r.read().decode(r.headers.get_content_charset(''utf-8''))) print(result[''headers''][''User-Agent''])