Итак, я пытаюсь импортировать определение слова из 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. Есть ли способы исправить это? Спасибо.

-1
Nitlix 14 Фев 2021 в 01:55

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

enter image description here

0
Pedro Lobito 13 Фев 2021 в 23:57

Возможно, лучше назвать ваш вопрос «Как проверить ответ 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, а также другие проверки работоспособности данных.

0
Ouss 13 Фев 2021 в 23:08

Я думаю, вам не хватает доступа к «определениям», прежде чем сразу перейти к «определениям». И «определения» - это тоже массив. ты хорошо справляешься, но не хватает собственности, вот и все.

0
Felipe 14 Фев 2021 в 00:04

Попробуй это

data[0]['meanings'][0]['definitions']
-1
Ade_1 13 Фев 2021 в 23:05
66190749