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