База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать HTTP-сервис в 1С:УНФ для обработки JSON в POST-запросе? › Ответ в теме: Как создать HTTP-сервис в 1С:УНФ для обработки JSON в POST-запросе?
В 1С:УНФ 8.3.27.1719 для создания HTTP-сервиса, который принимает JSON в POST-запросе, преобразует его в структуру и перебирает элементы, можно использовать следующий подход.
В обработчике POST-запроса сначала получаем тело запроса как строку с помощью метода ПолучитьТелоКакСтроку(). Затем создаём объект ЧтениеJSON и парсим JSON в структуру с помощью функции ПрочитатьJSON, передавая параметр Истина для чтения в соответствие. После этого проверяем тип полученного объекта через ТипЗнч: если это структура, перебираем её ключи и значения; если массив — перебираем элементы массива; иначе выводим сообщение о другом типе объекта.
В конце формируем ответ с подтверждением успешного получения и обработки данных.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
&НаКлиенте Процедура ОбработатьПостЗапрос(Запрос, Ответ) // Получаем тело запроса как строку ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку(); // Создаем объект чтения JSON ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(ТелоЗапроса); // Парсим JSON в структуру (второй параметр Истина - для соответствия) Данные = ПрочитатьJSON(ЧтениеJSON, Истина); ЧтениеJSON.Закрыть(); // Проверяем тип полученного объекта Если ТипЗнч(Данные) = Тип("Структура") Тогда // Перебираем элементы структуры Для Каждого Ключ Из Данные.Ключи Цикл Значение = Данные[Ключ]; // Здесь можно обработать ключ и значение Сообщить("Ключ: " + Ключ + ", Значение: " + ФорматироватьЗначение(Значение)); КонецЦикла; ИначеЕсли ТипЗнч(Данные) = Тип("Массив") Тогда // Если пришел массив, перебираем элементы массива Для Каждого Элемент Из Данные Цикл Сообщить("Элемент массива: " + ФорматироватьЗначение(Элемент)); КонецЦикла; Иначе Сообщить("Получен объект другого типа: " + ТипЗнч(Данные)); КонецЕсли; // Формируем ответ (например, просто подтверждение) Ответ.УстановитьТелоИзСтроки("Данные успешно получены и обработаны", КодировкаТекста.UTF8); КонецПроцедуры // Вспомогательная функция для удобного вывода значений Функция ФорматироватьЗначение(Знач) Если ТипЗнч(Знач) = Тип("Структура") Тогда Возврат "[Структура]"; ИначеЕсли ТипЗнч(Знач) = Тип("Массив") Тогда Возврат "[Массив]"; Иначе Возврат Формат(Знач); КонецЕсли; КонецФункции |