#python
#python
Вопрос:
Я пытаюсь распечатать значения "lat"
и "lon"
из JSON (источника):
{
"batchcomplete": "",
"query": {
"normalized": [
{
"from": "venice",
"to": "Venice"
}
],
"pages": {
"32616": {
"coordinates": [
{
"globe": "earth",
"lat": 45.4375,
"lon": 12.33583333,
"primary": ""
}
],
"ns": 0,
"pageid": 32616,
"title": "Venice"
}
}
}
}
Это мой код, который я должен был работать:
import urllib.request as url
import json
import urllib.parse
import ast
request = url.Request('https://en.wikipedia.org/w/api.php?action=queryamp;format=jsonamp;prop=coordinatesamp;list=amp;titles=venice')
data = url.urlopen(request).read()
data = data.decode("utf-8")
data = ast.literal_eval(data)
data = json.dumps(data)
array = json.loads(data)
#print(array)
print(array['query']['pages']['32616']['coordinates']['lat' ',' 'lon'])
Он возвращает ошибку: TypeError: list indices must be integers or slices, not str
.
Комментарии:
1.У вас где-то есть список словарей. Можете ли вы показать минимальный
array
Ответ №1:
print(array['query']['pages']['32616']['coordinates'][0]['lat'])
print(array['query']['pages']['32616']['coordinates'][0]['lon'])
insert ^
Комментарии:
1. Спасибо, я вижу свою ошибку. не учитывал [0]! Это работает отлично. но я столкнулся с другой проблемой. Я не рассматривал третье значение моего документа json [‘32616’] как динамическую переменную (это page_id). Знаете ли вы, «Как я могу работать с динамическими ключами в Python 3x?
2. Вы могли бы просто перебирать элементы в
array['query']['pages']
, например, так:for key, value in array['query']['pages'].items():
. Затем вы можете получитьvalue['coordinates'][0]['lat']
и['lon']
.3. Большое спасибо, вы были действительно полезны. Я не знаю, как я могу дать вам звезды в качестве плюса.
Ответ №2:
import requests
import json
r = requests.get('you URL here')
rData = json.loads(r.text, encoding="utf-8")
print(rData['query']['pages']['32616']['coordinates'][0]['lat'])
print(rData['query']['pages']['32616']['coordinates'][0]['lon'])
Комментарии:
1. Вам даже не нужен
json
модуль, просто используйтеr.json()
.2. Большое спасибо, все работает отлично. но я столкнулся с другой проблемой. Я не рассматривал третье значение моего документа json [‘32616’] как динамическую переменную (это page_id). Знаете ли вы, «Как я могу проанализировать документ JSON с динамическими ключами в Python 3x?»
3. для страницы в rData[‘query’][‘pages’]: