Я пробую обратное геокодирование на стороне сервера, которое может дать мне ответ json, и теперь я хочу получить 2 или 3 переменные из ответа json:
Я хотел бы разобрать, например, эти данные и закончить на eg.
administrative_area_level_1 = 'Stockholm'
jsondata = json.load(urllib2.urlopen('http://maps.googleapis.com/maps/api/geocode/json?latlng=59.3,18. 1&sensor=false'))
Вот мой код python, который получает json, теперь мне интересно, как разобрать его, чтобы получить только
Я могу разобрать его, но он не всегда выходит как administrative_area_1:
jsondata["results"][0]["address_components"][5]["long_name"]
Строка выше правильно выводит "New York" для точки в Нью-Йорке, но для Стокгольма выводит почтовый город, т.е. Johanneshow, который не является административной_областью_1 (регион/штат). Итак, как гарантировать, что функция всегда возвращает административную_область_1, желательно без циклов?
Я хочу, чтобы она работала примерно так, как показано ниже, с прямым доступом к стране, региону и городу:
logging.info("country:"+str(jsondata["results"][9]["formatted_address"]))
logging.info("administrative_area_level_1:"+str(jsondata["results"][8]["formatted_address"]))
logging.info("locality:"+str(jsondata["results"][8]["formatted_address"]))
Спасибо заранее
Обновление
Здесь хороший ответ с результатами, которые я ожидал. Пока я ждал ответа, я также попробовал реализовать решение самостоятельно, которое, похоже, справится:
jsondata = json.load(urllib2.urlopen('http://maps.googleapis.com/maps/api/geocode/json?latlng='+str(ad.geopt.lat)+','+str(ad.geopt.lon)+'&sensor=false'))
logging.info("geography:"+str(jsondata["results"][1]["formatted_address"]))
region = None
city = None
for result in jsondata["results"]:
#logging.info("result:"+str(result))
for component in result["address_components"]:
logging.info("components:"+str(component))
logging.info("components type:"+str(component["types"]))
if 'administrative_area_level_1' in component["types"]:
#logging.info(unicode('found admin area:%s' % component["long_name"]))
region = component["long_name"]
if 'locality' in component["types"]:
logging.info("found locality:"+str(component["long_name"]))
city = component["long_name"]