Pregunta

Quiero manipular la información en ESTE 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 que quiero conservar.

¿Hay alguna manera de convertir la cadena en un dictado para poder iterar sobre ella?¿O simplemente tengo que analizarlo tal 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
¿Fue útil?

Solución

cuando imprimí response.read() Me di cuenta que b estaba preprendedo a la cuerda (p. ej. b'{"a":1,..).La "b" representa bytes y sirve como declaración del tipo de objeto que estás manejando.Desde entonces, sabía que una cadena se podía convertir en un dict usando json.loads('string'), solo tuve que convertir el tipo de byte a un tipo de cadena.Hice esto decodificando la respuesta a utf-8. decode('utf-8').Una vez que estuvo 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 'pitónica' de escribir esto, pero funciona y siempre hay tiempo para optimizar y mejorar.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

Otros consejos

También puede usar la biblioteca de solicitudes 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 puede manipular el "DICT" como un diccionario de Python.

json funciona con un texto Unicode en Python 3 (el formato JSON en sí mismo se define 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 la codificación de carácter:

#!/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'])

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top