Получение данных с JSON

1. UPKA 24.06.22 11:19 Сейчас в теме
Здравствуйте уважаемые однофорумчане, подскажите пожалуйста. Хочу обработать запрос о пользователе с телеграмм. Получаю ответ в JSON. Так как ранее не работал с данным форматом, то хотел бы узнать, как его правильно разобрать и записать в реквизиты справочника?
Допустим:

Пользователи = Справочники.ПользователиТелеграмм.НайтиПоРеквизиту("ID",ID);

Пользователи.Получить();

Пользователи.Имя = Имя;

Пользователи.Ник = Ник;

Пользователи.Записать();

Ниже с JSON получить данные в такой структуре.

ID = "123456789"

Имя: "Иван"

Ник: "Иванов"

Сама строка у меня находится в реквизите: Ответ.СтрокаJSON

{
"ok": true,
"result": {
"user": {
"id": 123456789,
"is_bot": false,
"first_name": "Иван",
"username": "Иванов",
"language_code": "ru"
},
"status": "member"
}
}
По теме из базы знаний
Найденные решения
7. Onwardv 64 24.06.22 11:45 Сейчас в теме
(4)
Примерный код из Вашего примера (Но не проверял):


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.СтрокаJSON);
СтруктураДанных = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

ID = СтруктураДанных.result.user.id;
Имя = СтруктураДанных.result.user.first_name;
Ник = "";

Пользователи = Справочники.ПользователиТелеграмм.НайтиПоРеквизиту("ID",ID);
Пользователи.Получить();

Пользователи.Имя = Имя;
Пользователи.Ник = Ник;

Пользователи.Записать();
Показать


Ну и там проверки всякие нужные на заполненность и т.д.

Также, обратите внимание, что "Ник" по Вашему JSON не приехал
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. UPKA 24.06.22 11:21 Сейчас в теме
(2) Причем здесь получение данных? Данные я получил, мне необходимо их разобрать и записать. Про запись данных в этой статье ничего нет.
10. PLAstic 295 26.06.22 13:12 Сейчас в теме
(3) Если тебе недостаточно описания формата в описании API у телеграма, то в конфе есть пакет XDTO, где описан формат. С его помощью всё раскладывается.
4. Onwardv 64 24.06.22 11:39 Сейчас в теме
Так:

  	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Ответ.СтрокаJSON);
	СтруктураДанных = ПрочитатьJSON(ЧтениеJSON);
	ЧтениеJSON.Закрыть();


И далее работаешь со структурой.
6. UPKA 24.06.22 11:42 Сейчас в теме
(4) Это я уже видел. Этот пример присутствует на всех сайтах в выдаче поисковикв.На этом все)

По сути я уже получил данные в строку и записал все содержимое в реквизит Ответ.СтрокаJSON. Пример содержимого описал ниже. Т.е. что делать с этой строкой непонятно.
8. Onwardv 64 24.06.22 11:48 Сейчас в теме
(6) Понятно.


Рекомендую поставить точку останова в отладчике на строке:

ЧтениеJSON.Закрыть();


И посмотрите, что содержит в себе "СтруктураДанных" (SHIFt+F9)
7. Onwardv 64 24.06.22 11:45 Сейчас в теме
(4)
Примерный код из Вашего примера (Но не проверял):


ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.СтрокаJSON);
СтруктураДанных = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

ID = СтруктураДанных.result.user.id;
Имя = СтруктураДанных.result.user.first_name;
Ник = "";

Пользователи = Справочники.ПользователиТелеграмм.НайтиПоРеквизиту("ID",ID);
Пользователи.Получить();

Пользователи.Имя = Имя;
Пользователи.Ник = Ник;

Пользователи.Записать();
Показать


Ну и там проверки всякие нужные на заполненность и т.д.

Также, обратите внимание, что "Ник" по Вашему JSON не приехал
11. UPKA 29.06.22 18:33 Сейчас в теме
(7) Подскажите пожалуйста еще по одному вопросу.

Как вернуть первое значение file_id?


{
"ok": true,
"result": {
"total_count": 14,
"photos": [[{
"file_id": "AgADAgAD6qcxGwyaYxMulue7xCVvITMmrQ4ABKwFQfa_ML0d0qQBAAEC",
"file_size": 4367,
"width": 160,
"height": 160
},
{
"file_id": "AgADAgAD6qcxGwyaYxMulue7xCVvITMmrQ4ABBYsR-VFYPb806QBAAEC",
"file_size": 14094,
"width": 320,
"height": 320
},
{
"file_id": "AgADAgAD6qcxGwyaYxMulue7xCVvITMmrQ4ABOlO5fHuDpog1KQBAAEC",
"file_size": 47984,
"width": 640,
"height": 640
}]]
}
}
12. Onwardv 64 13.07.22 12:29 Сейчас в теме
(11)

Попробуйте:
file_id = СтруктураДанных.result.photos[0].file_id;
Такое решение не подходит для прода, только для посмотреть.

Смущает меня также две квадратных скобки подряд. ..."photos": [[{..., и зарытие тоже подряд ..}]].. вроде как массив в массиве.


В понятных типах 1с:
У вас в структуре "result" структура из двух значений, где "photos" является массивом структур.


В данном случае у вас массив структур описаний файлов. Каждый элемент массива - это структура содержащая описание одного файла.

Массивы нужно обрабатывать в цикле. Потому что массив вполне может приехать пустым. Если сделаете без цикла перебора массива,
а массив пуст, то строка "СтруктураДанных.result.photos[0]" будет отваливаться по ошибке.
5. PlatonStepan 38 24.06.22 11:40 Сейчас в теме
Чтение = новый ЧтениеJSON();
Чтение.УстановитьСтроку(СтрокаJSON);
СоответствиеКиЗ = ПрочитатьJSON(Чтение, ложь);

-посмотрите справку по ПрочитатьJSON() там много вариантов, для получения объектных данных
9. UPKA 24.06.22 12:54 Сейчас в теме
(7) Спасибо большое, получилось!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот