使用 Python 解析 JSON 文件以获取 Google 地图 API 的位置信息

想要使用 Python 解析 JSON 文件来获取 Google 地图 API 的位置信息,但在尝试访问 JSON 响应中的位置信息时遇到了问题。具体来说,当试图获取 JSON 响应中 results 字段的位置信息时,得到了一个 KeyError: ‘location’ 的错误。

  1. 解决方案

为了解决这个问题,需要理解 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)

这样就可以成功获取到位置信息。