想要使用 Python 解析 JSON 文件来获取 Google 地图 API 的位置信息,但在尝试访问 JSON 响应中的位置信息时遇到了问题。具体来说,当试图获取 JSON 响应中 results 字段的位置信息时,得到了一个 KeyError: ‘location’ 的错误。
- 解决方案
为了解决这个问题,需要理解 JSON 响应的格式。可以使用 pprint 模块来打印 JSON 响应,以查看其结构。
import pprint
jsonResponse = json.loads(googleResponse.read())
pprint.pprint(jsonResponse)
打印出的 JSON 响应如下:
{u'results': [{u'address_components': [{u'long_name': u'1600',
u'short_name': u'1600',
u'types': [u'street_number']},
{u'long_name': u'Amphitheatre Pkwy',
u'short_name': u'Amphitheatre Pkwy',
u'types': [u'route']},
{u'long_name': u'Mountain View',
u'short_name': u'Mountain View',
u'types': [u'locality',
u'political']},
{u'long_name': u'San Jose',
u'short_name': u'San Jose',
u'types': [u'administrative_area_level_3',
u'political']},
{u'long_name': u'Santa Clara',
u'short_name': u'Santa Clara',
u'types': [u'administrative_area_level_2',
u'political']},
{u'long_name': u'California',
u'short_name': u'CA',
u'types': [u'administrative_area_level_1',
u'political']},
{u'long_name': u'United States',
u'short_name': u'US',
u'types': [u'country',
u'political']},
{u'long_name': u'94043',
u'short_name': u'94043',
u'types': [u'postal_code']}],
u'formatted_address': u'1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA',
u'geometry': {u'location': {u'lat': 37.4216227,
u'lng': -122.0840263},
u'location_type': u'ROOFTOP',
u'viewport': {u'northeast': {u'lat': 37.424770299999999,
u'lng': -122.0808787},
u'southwest': {u'lat': 37.418475100000002,
u'lng': -122.0871739}}},
u'types': [u'street_address']}],
u'status': u'OK'}
从打印出的 JSON 响应中可以看出,jsonResponse[‘results’] 是一个列表,其中包含一个字典。这个字典包含了有关位置的各种信息,包括 geometry 字段。geometry 字段本身也是一个字典,其中包含了 location 字段。location 字段是一个字典,其中包含了 lat 和 lng 字段,分别表示纬度和经度。
因此,为了获取位置信息,可以这样修改代码:
test = json.dumps([s['geometry']['location'] for s in jsonResponse['results']], indent=3)
print(test)
这样就可以成功获取到位置信息。