Коротко о JSON и доступе к полям

Бот умеет работать с ответами от API в формате JSON. Вот как выглядит пример ответа в формате JSON:

{
    "msg": {
        "error": false,
        "status": "OK"
    },
    "sum": 1000,
    "date": "2022-10-10",
    "name": "box"
}

Стандартный ответ от API представляет из себя структуру, которая начинается с открывающих скобок "{" и заканчивается закрывающими "}". Чтобы "достать" что-то из этой структуры, используется ключевое слово "result". Внутри структуры разделенные запятыми находятся поля, которые представляют из себя пару "имя поля": "значение поля". В качестве значения поля может выступать строка ("пример"), число (123), bool (true/false), еще одна вложенная структура или массив. Чтобы обратиться к полю, после слова result ставится точка и пишется имя поля.

Разберем как обратиться к каждому полю в примере выше:


имя поляполучение значения поля в боте
errorresult.msg.error
statusresult.msg.status
sumresult.sum
dateresult.date
nameresult.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). 

Разберем как обратиться к каждому полю в примере выше:

имя поляЗначениеполучение значения поля в боте
errorfalseresult.msg.error
statusOKresult.msg.status
sum1000result.data.0.sum
date2022-10-10result.data.0.date
nameboxresult.data.0.name
sum2000result.data.1.sum
date2022-08-10result.data.1.date
namecardresult.data.1.name
sum5000result.data.2.sum
date2022-10-08result.data.2.date
namestickresult.data.2.name
count3result.count
  • Нет меток