Итак, я пытаюсь импортировать определение слова из Google Dictionary API. Но что-то пошло не так, вот код:
import requests
import json
word = "Hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
data = r.json()
definition = data['meanings'][1]['definition']
print(definition)
И что происходит, это выдает ошибку, что идентификатор должен быть int, а не str (так что он действует как список). Когда я пытаюсь получить к нему доступ с помощью print (data [0]), он печатает все, как если бы это список, содержащий только один элемент, который представляет собой весь ответ JSON. Есть ли способы исправить это? Спасибо.
4 ответа
Вы не получаете доступ к правильному объекту. Ты можешь попробовать:
import requests
word = "hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
if r.status_code == 200:
data = r.json()
definition = data[0]['meanings'][1]['definitions'][0]['definition']
print(definition)
Дерево объектов Json
Возможно, лучше назвать ваш вопрос «Как проверить ответ API с помощью python», потому что это именно то, что вы ищете.
В этом случае я использовал pprint()
для распечатки ответа и быстро выяснил, что вы сделали несколько ошибок в операторе definition=
при попытке получить доступ к значению. Итак, вот ваш код снова с небольшими улучшениями.
import requests
import json
import pprint
word = "Hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
data = r.json()
pprint.pprint(data)
definition = data[0]['meanings'][1]['definitions']
print(definition)
Важно отметить, что ваш код небезопасен; то есть, если ответ пуст, или ключи meanings
или definitions
отсутствуют, или есть только одна запись в списке meanings
, будет возбуждено исключение, а кода нет для обработки этого исключения. Возможно, вы захотите использовать try
except
, а также другие проверки работоспособности данных.
Я думаю, вам не хватает доступа к «определениям», прежде чем сразу перейти к «определениям». И «определения» - это тоже массив. ты хорошо справляешься, но не хватает собственности, вот и все.
Попробуй это
data[0]['meanings'][0]['definitions']
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.