Не удалось перевести JSON в ошибку запроса при вызове запроса обнаружения Watson

#python-3.x #watson-discovery

#python-3.x #watson-discovery

Вопрос:

Использование ibm-watson Python SDK версии 5.3.0 со следующим примером кода:

 from ibm_watson import DiscoveryV2, ApiException
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
import json


url = 'https://api.eu-de.discovery.watson.cloud.ibm.com'
version = '2020-08-30'

apikey = '...'
project = '...'
collection = '...'

authenticator = IAMAuthenticator(apikey)
discovery = DiscoveryV2(version=version, authenticator=authenticator)
discovery.set_service_url(url)

try:
    result = discovery.query(
        project_id=project,
        collection_ids=collection,
        query='text:searchterm',
        table_results=True
    ).get_result()


    print(json.dumps(result, indent=2))

except ApiException as ex:
    print(f'Failed. Status code {ex.code}: {ex.message}')
 

Возвращает следующую ошибку с сервера.

Сбой. Код состояния 400: не удалось перевести JSON в запросе: не удается десериализовать значение типа `scala.collection.immutable.Список <java.lang.Строка>` из строкового значения (токен `JsonToken.VALUE_STRING`)

Ошибка возникает только в том случае, если collections_ids table_results указан or .

Ответ №1:

Сервер сообщает вам, что отправленный ему JSON не соответствует тому, что он ожидает обработать.

collections_ids И table_results неправильно отформатированы для запроса API.

Согласно документации API.

  • collections_ids должен быть список. Поэтому измените на collections_ids=[collections]
  • table_results ожидает объект. Для правильного использования table_results={ 'enabled': True }