Python访问嵌套的JSON数据
问题描述:
我想使用zippopotam.us获取特定城市的邮政编码。我有以下的代码工作,除非我尝试访问post code
键返回TypeError: expected string or buffer
Python访问嵌套的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']
完整的JSON输出:
{
"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"
}
感谢您的帮助。
答
我没有意识到第一个嵌套元素实际上是一个数组。访问邮政编码密钥的正确方法如下:
r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()
print j['state']
print j['places'][1]['post code']
答
位置是一个列表而不是字典。因此,下面的这一行不应该起作用:
print data['places']['latitude']
您需要选择位置中的某个项目,然后才能列出该位置的属性。因此,要获得后的第一个代码,你会怎么做:
print data['places'][0]['post code']
答
在代码中j是已经JSON数据和j [“地方”]是列表中未字典。
r = requests.get('http://api.zippopotam.us/us/ma/belmont')
j = r.json()
print j['state']
for each in j['places']:
print each['latitude']
答
我使用这个LIB访问嵌套的字典键
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