Python访问嵌套的JSON数据

时间:2014-04-26 04:30:06

标签: python json rest

我试图使用zippopotam.us获取特定城市的邮政编码。我有以下代码可用,除非我尝试访问返回post code的{​​{1}}键

TypeError: expected string or buffer

完整的JSON输出:

r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()

data = json.loads(j)

print j['state']
print data['places']['latitude']

感谢您的帮助。

4 个答案:

答案 0 :(得分:55)

地方是一个列表而不是字典。因此,以下这一行不适用:

print data['places']['latitude']

您需要在地点中选择其中一个项目,然后您可以列出地点的属性。所以要获得你要做的第一个邮政编码:

print data['places'][0]['post code']

答案 1 :(得分:23)

我没有意识到第一个嵌套元素实际上是一个数组。访问邮政编码密钥的正确方法如下:

r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()

print j['state']
print j['places'][1]['post code']

答案 2 :(得分:8)

在你的代码中,j是已经是json数据而j [' places']是list not cict。

 r = requests.get('http://api.zippopotam.us/us/ma/belmont')
 j = r.json()

 print j['state']
 for each in j['places']:
    print each['latitude']

答案 3 :(得分:5)

我使用此lib访问嵌套的dict键

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