I'm trying to get the zip code for a particular city using zippopotam.us. I have the following code which works, except when I try to access the post code key which returns TypeError: expected string or buffer
r = requests.get(') j = r.json() data = json.loads(j) print j['state'] print data['places']['latitude'] Full JSON output:
{ "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" } 14 Answers
Places is a list and not a dictionary. This line below should therefore not work:
print data['places']['latitude'] You need to select one of the items in places and then you can list the place's properties. So to get the first post code you'd do:
print data['places'][0]['post code'] I did not realize that the first nested element is actually an array. The correct way access to the post code key is as follows:
r = requests.get(') j = r.json() print j['state'] print j['places'][1]['post code'] In your code j is Already json data and j['places'] is list not dict.
r = requests.get(') j = r.json() print j['state'] for each in j['places']: print each['latitude'] I'm using this lib to access nested dict keys
import requests from addict import Dict r = requests.get(') j = Dict(r.json()) print j.state print j.places[1]['post code'] # only work with keys without '-', space, or starting with number