如何搜索JSON提要

时间:2011-08-02 23:05:46

标签: python json google-maps

我正在使用下面的代码,并调用Google Maps API并解析一些JSON数据。

def getLocalityFromPostCode(postcode):
    import urllib, json
    import pprint
    url = "http://maps.googleapis.com/maps/api/geocode/json?address=%s&sensor=false" % postcode
    googleResponse = urllib.urlopen(url)
    jsonResponse = json.loads(googleResponse.read())
    return jsonResponse

这很好用。但是,我只需要['results']['address_components']'type'[ "locality", "political" ]的值,但此值的索引会根据给定的邮政编码字符串的精确程度而有所不同。

如果我给出一个直的poscode(如XX10),该值将显示在address_components列表的第0项中。但是,如果我给一个城市和邮政编码它出现在第一项。

是的,请有人帮帮我。我需要在address_components中搜索[ "locality", "political" ]值。

修改

您可以在http://maps.googleapis.com/maps/api/geocode/json?address=sy4&sensor=false(只是邮政编码)和http://maps.googleapis.com/maps/api/geocode/json?address=47%20High%20Street%20Shrewsbury,%20SY4&sensor=false(完整地址)查看电子Feed。

正如您在示例1中看到的那样,我正在寻找的数据在索引1中,而在第二个示例中,我正在寻找的数据在索引2中。

2 个答案:

答案 0 :(得分:7)

这看起来像你想要的:))

results = json.load(googleResponse)['results']

for result in results:
    for address_component in result['address_components']:
        if address_component['types'] == ['locality', 'political']
            # address_component['long_name'] and
            # address_component['short_name'] are your data
            break

关于JSONPython dicts的一个很酷的事情是,您不需要按编号索引,而是按名称编制索引。在这种情况下,您的对象(或至少您关心的数据)会像这样分解:

'results': # a list of resulting dicts
[
    { # one of those resulting dicts
        'address_components':  # a key, representing some other data
        [ # which, in this case, is a list of address component dicts
            { # like this
                'long_name': 'A String. The Long Name.'
                'short_name': 'Another String. The Short Name.'
                'types': # a list of type strings
                [
                    'locality', # one of the types
                    'political' # the other type
                ]
            }
        ]
    }
]

答案 1 :(得分:-2)

从json创建一个对象并通过键访问值

import json
obj = json.loads(jsonString)