Как искать через канал JSON - PullRequest
       3

Как искать через канал JSON

3 голосов
/ 03 августа 2011

Я использую приведенный ниже код, звоню в API Карт Google и анализирую некоторые данные 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" ], однако индекс этого значения отличается в зависимости от того, насколько точна заданная строка почтового индекса.

Если я даю прямой почтовый индекс(например, XX10) значение появляется в 0-м элементе списка address_components.Однако, если я дам город и почтовый индекс, он появится в 1-м пункте.

Может кто-нибудь помочь мне, пожалуйста.Мне нужно искать в адресных_компонентах значение [ "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 (полный адрес).

Как вы можете видеть в примере 1, данные, которые я ищу, находятся в индексе 1, тогда как во втором примере я ищу данные в индексе 2.

Ответы [ 2 ]

7 голосов
/ 03 августа 2011

Это похоже на то, что вы хотите:)

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

Крутая вещь о JSON и Python диктует , что вам не нужно индексировать по номеру, вы индексируете по имени. В этом случае ваш объект (или, по крайней мере, данные, которые вас интересуют) разбивается следующим образом:

'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
                ]
            }
        ]
    }
]
0 голосов
/ 03 августа 2011

Создание объекта из json и доступ к значениям с помощью клавиш

import json
obj = json.loads(jsonString)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...