leer ejemplo dict decodificar create array acceder python json rest

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