@TKDBOT
Учу python. Готов к конструктивной критике.

Как узнать значение «city»?

Имеется запрос к сайту
geo = {'format': 'json', 'lat': f'{message.location.latitude}', 'lon': f'{message.location.longitude}'}
    r = requests.get('https://nominatim.openstreetmap.org/reverse', params=geo)

Который возвращает ответ:
spoiler

{"place_id":158413949,
"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright",
"osm_type":"way",
"osm_id":227214466,
"lat":"51.22778325",
"lon":"51.43176735508452",
"display_name":"2/3, улица Юрия Гагарина, Уральск, Уральск Г.А., Западно-Казахстанская область, 090005, Казахстан",
"address":{"house_number":"2/3","road":"улица Юрия Гагарина","city":"Уральск","county":"Уральск Г.А.","state":"Западно-Казахстанская область","ISO3166-2-lvl4":"KZ-ZAP","postcode":"090005","country":"Казахстан","country_code":"kz"},
"boundingbox":["51.2274636","51.2280884","51.4309297","51.4323584"]}

Как я понял он формате списка, но считается одним единственным элементом.
Пробовал преобразовать в словарь, но все равно получаю 1 элемент. Как можно узнать значение ключей?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
igorzakhar
@igorzakhar
Это словарь и есть, можешь проверить так:
type(r.json())

Соответственно, у словаря есть ключи, которые можно посмотреть методом keys():
>>> geo = {'format': 'json', 'lat': f'51.22778325', 'lon': f'51.43176735508452'}
>>> r = requests.get('https://nominatim.openstreetmap.org/reverse', params=geo)
>>> r.json()
{'place_id': 158413949,
 'licence': 'Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright', 
 'osm_type': 'way', 'osm_id': 227214466,
 'lat': '51.22778325', 
 'lon': '51.43176735508452', 
 'display_name': '2/3, улица Юрия Гагарина, Уральск, Уральск Г.А., Западно-Казахстанская область, 090005, Қазақстан', 
 'address': {'house_number': '2/3', 'road': 'улица Юрия Гагарина', 'city': 'Уральск', 'county': 'Уральск Г.А.', 'state': 'Западно-Казахстанская область', 'ISO3166-2-lvl4': 'KZ-ZAP', 'postcode': '090005', 'country': 'Қазақстан', 'country_code': 'kz'}, 
 'boundingbox': ['51.2274636', '51.2280884', '51.4309297', '51.4323584']}
>>> type(r.json())
<class 'dict'>
>>> r.json().keys()
dict_keys(['place_id', 'licence', 'osm_type', 'osm_id', 'lat', 'lon', 'display_name', 'address', 'boundingbox'])
>>>


UPD. В значении ключа address тоже словарь. Узнать ключи словаря в address:

...
>>> r.json().get('address').keys()
dict_keys(['house_number', 'road', 'city', 'county', 'state', 'ISO3166-2-lvl4', 'postcode', 'country', 'country_code'])
...


Узнать значение поля city можно так:

...
>>> r.json().get('address').get('city')
'Уральск'
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы