|
Как правильно сформировать JSON-ответ в HTTP-сервисе 1С для мобилка в 1с? |
☑ | ||
|---|---|---|---|---|
|
(1)
Tahallus
13 февраля 2020 г.
10:52
|
Ребята, пытаюсь сделать REST API на 1С, но не понимаю, как правильно сформировать JSON-ответ. Мне нужно выгружать список товаров. Кто-нибудь делал что-то подобное?
|
|||
|
(2)
PixelGuru
13 февраля 2020 г.
11:15
|
Конечно! Тут важно корректно сериализовать данные в JSON. У тебя структура JSON вложенная или простая?
|
|||
|
(3)
DimR_71
13 февраля 2020 г.
12:46
|
Попробуй этот вариант, он рабочий:
Показать спойлерФункция СписокТоваровGET(Запрос) Ответ = Новый HTTPСервисОтвет(200); // Получить из запроса параметр URL *. Выборка = Справочники.ТоварыИУслуги.Выбрать(); // В цикле обхода выборкизаписать в JSON список сотрудников. // Создать объект записи и записать строковое значение в строку JSON. Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); // Записать начало корневого объекта. Запись.ЗаписатьНачалоОбъекта(); Пока Выборка.Следующий() Цикл Запись.ЗаписатьИмяСвойства("Товар" + Выборка.Код); Запись.ЗаписатьНачалоОбъекта(); Запись.ЗаписатьИмяСвойства("Код"); Запись.ЗаписатьЗначение(Выборка.Код); Запись.ЗаписатьИмяСвойства("Наименование"); Запись.ЗаписатьЗначение(Выборка.Наименование); Запись.ЗаписатьИмяСвойства("ЭтоУслуга"); Запись.ЗаписатьЗначение(Выборка.ЭтоУслуга); Запись.ЗаписатьИмяСвойства("Цена"); Запись.ЗаписатьЗначение(Строка(Выборка.Цена)); Запись.ЗаписатьКонецОбъекта(); КонецЦикла; // Записать конец корневого объекта. Запись.ЗаписатьКонецОбъекта(); // Записать результат записи в строку JSON. Результат = Запись.Закрыть(); // Установить тело ответа из строки Результат. Ответ.УстановитьТелоИзСтроки(Результат); Ответ.Заголовки.Вставить("Content-type", "application/json"); Возврат Ответ; КонецФункции |
|||
|
(4)
ProCoder77
5 мая 2021 г.
14:29
|
Кстати, этот метод у меня висит на /products, так что он должен выдавать список товаров по GET-запросу.
|
|||
|
(5)
LogiMaster
6 мая 2021 г.
5:05
|
http-сервис с корнем home, а потом шаблонURL с url /products.
А потом гоняешь запрос в мобилке к url
ВыполнитьЗапрос("GET", "InfoBase16/hs/home/products/", ""); |
|||
|
(6)
PixelWarrior
6 мая 2021 г.
7:25
|
В мобилке я потом таким образом загрузку делаю. Кнопку на форму и запрос к url, получение JSON и его обработка с помощью ПростоеЧтениеJSON, а дальше всего навсего разложить в новый обхект и записать.
Показать спойлер&НаКлиенте Процедура ЗагрузитьТовары(Команда) ВыполнитьЗапрос("GET", "InfoBase16/hs/home/products/", ""); КонецПроцедуры &НаСервере Процедура ВыполнитьЗапрос(ИмяМетода, АдресРесурса, СтрокаТелаЗапроса) // Установить имя сервера. СерверИсточник = "192.168.2.79"; Сообщение = Новый СообщениеПользователю; Попытка // Создать HTTP-соединение с сервером localhost. HTTPСоединение = Новый HTTPСоединение(СерверИсточник); Исключение // Вывести сообщение об ошибке соединения с сервером. Сообщение.Текст = "Не удалось соединиться с сервером: " + СерверИсточник; Сообщение.Сообщить(); Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); Возврат; КонецПопытки; // Создать HTTP-запрос на основе URL. HTTPЗапрос = Новый HTTPЗапрос(АдресРесурса); Попытка // Получить ответ сервера в виде объекта HTTPОтвет. Результат = HTTPСоединение.ВызватьHTTPМетод(ИмяМетода, HTTPЗапрос); ДанныеВJson = Результат.ПолучитьТелоКакСтроку(); Сообщить(ДанныеВJson); СтруктураДанные = ПростоеЧтениеJSON(ДанныеВJson); //Сообщить(СтруктураДанные); //Сообщить(СтруктураДанные.Количество()); Для каждого Элемент Из СтруктураДанные Цикл //Элемент.Значение - это структура товара, дальше по реквизитам справочника обращаемся НовыйТовар = Справочники.ТоварыИУслуги.СоздатьЭлемент(); НовыйТовар.Код = Элемент.Значение.Код; НовыйТовар.Наименование = Элемент.Значение.Наименование; НовыйТовар.ЭтоУслуга = Элемент.Значение.ЭтоУслуга; НовыйТовар.Цена = Элемент.Значение.Цена; НовыйТовар.Записать(); КонецЦикла; Сообщить("Товары загружены"); Исключение // Вывести сообщение об ошибке при получении ответа сервера. Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); Возврат; КонецПопытки; КонецПроцедуры Функция ПростоеЧтениеJSON(Данные) ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(Данные); Возврат ПрочитатьJSON(ЧтениеJSON); КонецФункции |
|||
|
(7)
AutoAns
6 мая 2021 г.
16:05
|
Да, тогда всё логично. Главное, чтобы сервер правильно принимал запрос и возвращал JSON. Если используешь веб-сервер 1С, убедись, что у тебя заголовки правильно выставлены (Content-type: application/json).
|
|||
|
(8)
1Снеговик
6 мая 2021 г.
17:11
|
ЛОЛ, JSON в 1С? Это же как ковыряться в коде DOS на 486-м! Используйте нормальные языки, а не этот ваш каменный век!
|
|||
|
(9)
Fedor-1971
7 мая 2021 г.
15:01
|
Для заказчиков делать так
Показать спойлерФункция СписокКлиентовGET(Запрос) Ответ = Новый HTTPСервисОтвет(200); // Получить из запроса параметр URL *. Выборка = Справочники.Клиенты.Выбрать(); // В цикле обхода выборки записать в JSON список сотрудников. // Создать объект записи и записать строковое значение в строку JSON. Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); // Записать начало корневого объекта. Запись.ЗаписатьНачалоОбъекта(); Пока Выборка.Следующий() Цикл Запись.ЗаписатьИмяСвойства(Выборка.Наименование); Запись.ЗаписатьНачалоОбъекта(); Запись.ЗаписатьИмяСвойства("Код"); Запись.ЗаписатьЗначение(Выборка.Код); Запись.ЗаписатьИмяСвойства("Телефон"); Запись.ЗаписатьЗначение(Строка(Выборка.Телефон)); Запись.ЗаписатьИмяСвойства("Email"); Запись.ЗаписатьЗначение(Строка(Выборка.Email)); Запись.ЗаписатьИмяСвойства("Менеджер"); Запись.ЗаписатьЗначение(Строка(Выборка.Менеджер)); Запись.ЗаписатьИмяСвойства("Комментарий"); Запись.ЗаписатьЗначение(Строка(Выборка.Комментарий)); Запись.ЗаписатьКонецОбъекта(); КонецЦикла; // Записать конец корневого объекта. Запись.ЗаписатьКонецОбъекта(); // Записать результат записи в строку JSON. Результат = Запись.Закрыть(); // Установить тело ответа из строки Результат. Ответ.УстановитьТелоИзСтроки(Результат); Ответ.Заголовки.Вставить("Content-type", "application/json"); Возврат Ответ; КонецФункции |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |