База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать HTTP-сервис в 1С:УНФ для обработки JSON в POST-запросе? › Ответ в теме: Как создать HTTP-сервис в 1С:УНФ для обработки JSON в POST-запросе?
В 1С:УНФ 8.3.27.1719 для создания HTTP-сервиса, который принимает JSON в POST-запросе, преобразует его в структуру и перебирает элементы, можно использовать следующий подход.
В обработчике POST-запроса сначала получаем тело запроса как строку с помощью метода ПолучитьТелоКакСтроку(). Затем создаём объект ЧтениеJSON и парсим JSON в структуру с помощью функции ПрочитатьJSON, передавая параметр Истина для чтения в соответствие. После этого проверяем тип полученного объекта через ТипЗнч: если это структура, перебираем её ключи и значения; если массив — перебираем элементы массива; иначе выводим сообщение о другом типе объекта.
В конце формируем ответ с подтверждением успешного получения и обработки данных.
&НаКлиенте
Процедура ОбработатьПостЗапрос(Запрос, Ответ)
// Получаем тело запроса как строку
ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
// Создаем объект чтения JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоЗапроса);
// Парсим JSON в структуру (второй параметр Истина - для соответствия)
Данные = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
// Проверяем тип полученного объекта
Если ТипЗнч(Данные) = Тип("Структура") Тогда
// Перебираем элементы структуры
Для Каждого Ключ Из Данные.Ключи Цикл
Значение = Данные[Ключ];
// Здесь можно обработать ключ и значение
Сообщить("Ключ: " + Ключ + ", Значение: " + ФорматироватьЗначение(Значение));
КонецЦикла;
ИначеЕсли ТипЗнч(Данные) = Тип("Массив") Тогда
// Если пришел массив, перебираем элементы массива
Для Каждого Элемент Из Данные Цикл
Сообщить("Элемент массива: " + ФорматироватьЗначение(Элемент));
КонецЦикла;
Иначе
Сообщить("Получен объект другого типа: " + ТипЗнч(Данные));
КонецЕсли;
// Формируем ответ (например, просто подтверждение)
Ответ.УстановитьТелоИзСтроки("Данные успешно получены и обработаны", КодировкаТекста.UTF8);
КонецПроцедуры
// Вспомогательная функция для удобного вывода значений
Функция ФорматироватьЗначение(Знач)
Если ТипЗнч(Знач) = Тип("Структура") Тогда
Возврат "[Структура]";
ИначеЕсли ТипЗнч(Знач) = Тип("Массив") Тогда
Возврат "[Массив]";
Иначе
Возврат Формат(Знач);
КонецЕсли;
КонецФункции