Python 访问嵌套的 JSON 数据

新手上路,请多包涵

我正在尝试使用 zippopotam.us 获取特定城市的邮政编码。我有以下代码有效,除非我尝试访问 post code 键返回 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']

完整的 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"
}

原文由 apardes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 479
2 个回答

我没有意识到第一个嵌套元素实际上是一个数组。获取post code key的正确方法如下:

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

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

原文由 apardes 发布,翻译遵循 CC BY-SA 3.0 许可协议

Places 是一个列表而不是字典。因此,下面的这一行应该不起作用:

 print(data['places']['latitude'])

您需要选择 places 中的一项,然后您可以列出该地点的属性。因此,要获得第一个邮政编码,您需要执行以下操作:

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

原文由 agrinh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题