Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

В этой статье описан процесс получения данных из ответа от сервера. Для использования ответа сервера в боте, сервер должен возвращать данные в формате JSON. 

Подсказка

Как создавать запросы к серверу для тестирования и тестировать запросы перед использованием в боте описано в этой статье.


Вот мы получили JSON файл следующего вида.

Блок кода
languagepy
themeDJango
firstline1
titleТело запроса в формате Json:
linenumberstrue
{
    "ok": true,
    "result": {
        "user": {
            "id": 426232239,
            "is_bot": false,
            "first_name": "Ярослав",
            "last_name": "Ярославович",
            "username": "yaryarich",
            "language_code": "ru"
        },
        "status": "creator",
        "is_anonymous": false
    }
}

Составление адреса поля

При работе со списком


Предположим, нам требуется подтянуть имя. Чтобыint i = 0; обратиться  обратиться к этому полю, нужно прописать полный адрес до него. Таким адресом будет result.result.user.first_name

...

  1. Для получения любой информации из JSON файла, при получении ответа от сервера, первым делом всегда пишется result, таким образом объявляется тело ответа. Адрес на этом этапе: «result».
    Image Removed
    Image Added

  2. Элементы адреса разделяются между собой точками. Адрес на этом этапе: «result.».

  3. Обращаемся к списку с именем result. Адрес на этом этапе: «result.result».
    Image Removed
    Image Added

  4. Обращаемся к списку с именем user. Адрес на этом этапе: «result.result.user».
    Image Removed
    Image Added

  5. Указываем поле, которое содержит интересующую нас информацию, сейчас таким полем является first_name. Оно содержит в себе значение: Ярослав. Адрес на этом этапе: «result.result.user.first_name».
    Image Removed
    Image Added
Предупреждение

В связи с особенностями архитектуры системы, нет возможности успешно подтянуть значение переменных, которое равно true или false. При попытке подтянуть true, значение будет преобразовано в 1 и все отработает исправно, но если попробовать подтянуть false, то бот сломается, так как преобразует false в "", где "" – отсутствие символов. 

Попытка подтянуть значение поля ok, которое равно true, закончится неудачей:
В случае ok = true, будет подтянуто значение 1.
В случае ok = false, бот сломается, так как переменная окажется пустая.

Адрес поля ok: «result.ok»
Image Removed
Image Added

Таким образом полный адрес искомого элемента: «result.result.user.first_name».

При работе с массивом

Составим еще один адрес, он отличается тем, что содержит в себе массив.

...

  1. Объявите тело ответа. Адрес на этом этапе: «result».
    Image Removed
    Image Added

  2. Между элементами адреса проставьте точки. Адрес на этом этапе: «result.».

  3. Укажите поле calls. Это поле является массивом. Массивы обозначаются квадратными скобками. Адрес на этом этапе: «result.calls».

    Image Added
    Image Removed

  4. Все элементы массива обозначаются индексами. Укажите элемент массива, содержащий интересующую информацию. Адрес на этом этапе: «result.calls.1».

    Image AddedImage Removed
    Примечание

    Индексация в массивах начинается с 0, поэтому если в массиве 3 элемента, то индексироваться они будут следующим образом: 0, 1, 2.

  5. После того как попали в нужный элемент массива, укажите поле variables. Адрес на этом этапе: «result.calls.1.variables».
    Image Removed
    Image Added

  6. Укажите последнее интересующее вас поле age. Адрес на этом этапе: «result.calls.1.variables.age».
    Image Removed
    Image Added

Таким образом полный адрес искомого элемента: «result.calls.1.variables.age».

...

Попробуем получить значение переменной first_name из одного из примеров выше уже в сценарии. Для этого создадим запрос к серверу и подтянем оттуда искомый JSONзначение нужного поля.

Для сохранения нужных данных в переменную указываем полный адрес в JSON к искомым данным.

...