ejemplo - Python que accede a datos JSON anidados
python json ejemplo (4)
En su código j ya está json data yj [''places''] es list not dict.
r = requests.get(''http://api.zippopotam.us/us/ma/belmont'')
j = r.json()
print j[''state'']
for each in j[''places'']:
print each[''latitude'']
Estoy tratando de obtener el código postal de una ciudad en particular usando zippopotam.us. Tengo el siguiente código que funciona, excepto cuando trato de acceder a la clave de post code
que devuelve TypeError: expected string or buffer
r = requests.get(''http://api.zippopotam.us/us/ma/belmont'')
j = r.json()
data = json.loads(j)
print j[''state'']
print data[''places''][''latitude'']
Salida JSON completa:
{
"country abbreviation": "US",
"places": [
{
"place name": "Belmont",
"longitude": "-71.4594",
"post code": "02178",
"latitude": "42.4464"
},
{
"place name": "Belmont",
"longitude": "-71.2044",
"post code": "02478",
"latitude": "42.4128"
}
],
"country": "United States",
"place name": "Belmont",
"state": "Massachusetts",
"state abbreviation": "MA"
}
Gracias por tu ayuda.
Estoy usando esta lib para acceder a las claves dict anidadas
https://github.com/mewwts/addict
import requests
from addict import Dict
r = requests.get(''http://api.zippopotam.us/us/ma/belmont'')
ad = Dict(r.json())
print j.state
print j.places[1][''post code''] # only work with keys without ''-'', space, or starting with number
No me di cuenta de que el primer elemento anidado es en realidad una matriz. La forma correcta de acceder a la clave del código postal es la siguiente:
r = requests.get(''http://api.zippopotam.us/us/ma/belmont'')
j = r.json()
print j[''state'']
print j[''places''][1][''post code'']
Places es una lista y no un diccionario. Por lo tanto, esta línea no debería funcionar:
print data[''places''][''latitude'']
Debe seleccionar uno de los elementos en lugares y luego puede enumerar las propiedades del lugar. Entonces, para obtener el primer código postal, haría lo siguiente:
print data[''places''][0][''post code'']