Отправка данных на сайт post - запросом в формате JSON

Обмен - Интеграция с WEB

Пример использования стандартных механизмов платформы 1С, начиная с версии 8.3.6.1977.

JSON (JavaScript Object Notation) это текстовый формат обмена данными, широко используемый в веб-приложениях. По сравнению с XML он является более лаконичным и занимает меньше места. Кроме этого все браузеры имеют встроенные средства для работы с JSON.

Необходимость работы с этим форматом на уровне платформы обусловлена не только тем, что это «модный современный» формат, который прикладные решения 1С:Предприятия сами по себе могут использовать для интеграции со сторонними приложениями. Другая причина заключается ещё и в том, что JSON активно используется в HTTP интерфейсах. А в 1С:Предприятии как раз есть такие механизмы, в которых хочется использовать этот формат. Это REST интерфейс приложения, автоматически генерируемый платформой, и HTTP-сервисы, которые вы можете создавать самостоятельно. (источник: http://v8.1c.ru/o7/201410json/index.htm). 

 

Простой код отправки данных выглядит так:

//здесь выполняем запрос, в котором есть данные о нашых товарах (код товара (sku), 
//Наименование товара(name), цена(price) и остаток(qty))
Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    

    //Создали запись ЗаписьJSON
    ЗаписьJSON = Новый ЗаписьJSON;
    //Задаем параметры без переноса строк, можно и с переносом, как кому нравится
    тПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);  
    ЗаписьJSON.УстановитьСтроку(тПараметрыJSON); 
    
    
    МассивДанныхJSON = Новый Массив;
    СтруктураДанныхJSON = Новый Структура; 

    //Выбираем данные из запроса и записываем в массив "МассивДанныхJSON"       

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл 
       // Каждая запись товара у нас отдельная структура...
              тДанные = Новый Структура;
                тДанные.Вставить("sku", ВыборкаДетальныеЗаписи.sku);
                тДанные.Вставить("name", ВыборкаДетальныеЗаписи.name);
                тДанные.Вставить("price", ВыборкаДетальныеЗаписи.price);
                тДанные.Вставить("qty", ВыборкаДетальныеЗаписи.qty);
       //Добавляем структуру с информацией о товаре в наш массив "МассивДанныхJSON" 
               МассивДанныхJSON.Добавить(тДанные);
                
    КонецЦикла;    
    // вставляем наш массив в ещеодну структуру
    СтруктураДанныхJSON.Вставить("test", МассивДанныхJSON);

    ЗаписатьJSON(ЗаписьJSON, СтруктураДанныхJSON);
    //Здесь нам платформа переделала нашу сложную структуру в строку данных в формате JSON 
    СтрокаJS = ЗаписьJSON.Закрыть();
    //В этот файл для примера наш сайт сформирует ответ после отправки на него данных методом POST
    ФайлОтвета = КаталогВременныхФайлов()+ "\answer.txt";
  
    //здесь надо указать путь к сайту
    HTTPСоединение = Новый HTTPСоединение("mysite.com/download.php");
    //создаем запрос данных методом POST
    запросPOST = Новый HTTPЗапрос("POST"); 
    
//это обязательный заголовок тела запроса
    запросPOST.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded");
//Здесь задаем текст нашей отформатированной строки + задаем формат сроки 
    запросPOST.УстановитьТелоИзСтроки("mData="+СтрокаJS,"windows-1251",ИспользованиеByteOrderMark.НеИспользовать);
    
    
    
    Попытка
//Отправляем для обрааботки на наш сервер
        HTTPСоединение.ОтправитьДляОбработки(запросPOST, ФайлОтвета);
            
    Исключение
        #Если клиент Тогда
           Сообщить(ОписаниеОшибки());
        #КонецЕсли   
    КонецПопытки;

 

Скачать файлы

Наименование Файл Версия Размер
Отправка данных на сайт post - запросом в формате JSON :
.epf 8,07Kb
10.09.17
1
.epf 8,07Kb 1 Скачать

См. также

Комментарии
1. Роман Ложкин (webester) 24 12.09.17 06:31 Сейчас в теме
Ни одного комментария, ни в самом коде, не после. Ну да мы же программисты можем сами открыть СП и разобраться, что ты написал и почему. Но как бы смысл тогда в статье, если все равно надо лезть в СП?
maxopik2; Bassgood; +2 Ответить
3. Иван Тарнавский (vaniiok) 15 12.09.17 11:16 Сейчас в теме
(1)Извините, исправил
webester; +1 Ответить
2. Кирилл kirillkr (kirillkr) 27 12.09.17 08:40 Сейчас в теме
Зачем сохранять ответ от сервера в файле? Не надо захламлять сервер временными файлами. У него и без Вас полно мусора от самой системы.
4. Иван Тарнавский (vaniiok) 15 12.09.17 11:17 Сейчас в теме
(2)это пример, можно и без этого
5. Михаил Гусев (Идальго) 64 12.09.17 21:32 Сейчас в теме
(2) Как вариант, результат сохраняют в файл для того, чтобы затем его последовательно прочитать (чтоб память пожалеть) или переслать/сохранить. Первый случай особенно полезен, если ответ мегадлинный(большой), или вообще состоит из нескольких частей, которые затем можно "склеить".
6. Кирилл kirillkr (kirillkr) 27 12.09.17 23:56 Сейчас в теме
(5) А есть системы с маленьким жестким диском для сервера приложений, но большим объемом памяти.
А в данном примере не показано удаление этого файла после обработки результата.
Оставьте свое сообщение