Коротко о JSON и доступе к полям
Бот умеет работать с ответами от API в формате JSON. Вот как выглядит пример ответа в формате JSON:
{ "msg": { "error": false, "status": "OK" }, "sum": 1000, "date": "2022-10-10", "name": "box" }
Стандартный ответ от API представляет из себя структуру, которая начинается с открывающих скобок "{" и заканчивается закрывающими "}". Чтобы "достать" что-то из этой структуры, используется ключевое слово "result". Внутри структуры разделенные запятыми находятся поля, которые представляют из себя пару "имя поля": "значение поля". В качестве значения поля может выступать строка ("пример"), число (123), bool (true/false), еще одна вложенная структура или массив. Чтобы обратиться к полю, после слова result ставится точка и пишется имя поля.
Разберем как обратиться к каждому полю в примере выше:
имя поля | получение значения поля в боте |
---|---|
error | result.msg.error |
status | result.msg.status |
sum | result.sum |
date | result.date |
name | result.name |
Работа с массивами
Иногда в ответе от API может прийти массив данных. Отличить массив от других типов данных можно по открывающим и закрывающим скобкам: массив находится между "[" и "]". Например:
{ "msg": { "error": false, "status": "OK" }, "data": [ { "sum": 1000, "date": "2022-10-10", "name": "box" }, { "sum": 2000, "date": "2022-08-10", "name": "card" }, { "sum": 5000, "date": "2022-10-08", "name": "stick" } ], "count": 3 }
В данном примере значением поля с именем "data" является массив значений. Чтобы обратиться к элементу массива, нужно указать номер элемента массива (обратите внимание, что нумерация элементов массива начинается с 0, а не с 1).
Разберем как обратиться к каждому полю в примере выше:
имя поля | Значение | получение значения поля в боте |
---|---|---|
error | false | result.msg.error |
status | OK | result.msg.status |
sum | 1000 | result.data.0.sum |
date | 2022-10-10 | result.data.0.date |
name | box | result.data.0.name |
sum | 2000 | result.data.1.sum |
date | 2022-08-10 | result.data.1.date |
name | card | result.data.1.name |
sum | 5000 | result.data.2.sum |
date | 2022-10-08 | result.data.2.date |
name | stick | result.data.2.name |
count | 3 | result.count |