1С 8.3 Валидация JSON через XDTO - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Валидация JSON через XDTO

Перейти в основной раздел:
Видоизмененная функция (копипаста) для проверки JSON файлов. Пруф: infostart.ru/1c/articles/1924346/
Валидация JSON через XDTO (включая массивы) в 1С 8.3:
Процедура ВалидацияJSONчерезXDTO(JSON) Экспорт
   ФабрикаXDTO = ФабрикаXDTO.Тип("http://www.koder.by", "Test");
   МассивТиповXDTO = Новый Массив();
   МассивТиповXDTO.Добавить(ФабрикаXDTO.Тип("http://www.koder.by", "dateTime"));
   МассивТиповXDTO.Добавить(ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string"));

   Попытка
       ЧтениеJSON = Новый ЧтениеJSON;
       ЧтениеJSON.УстановитьСтроку(JSON);  // Строка - наш JSON в виде строки
       Данные = ФабрикаXDTO.ПрочитатьJSON(
       ЧтениеJSON,
       ФабрикаXDTO,
      "ВосстановлениеСвойств", // имя функции восстановления
       ВалидацияJSON,                 // модуль, в котором находится функция
       ,                                             // тут могут быть дополнительные параметры, которые полетят в функцию восстановления
       МассивТиповXDTO              // массив типов XDTO, которые необходимо восстановить
       );
       ЧтениеJSON.Закрыть();
   Исключение
       ТекстОшибки = НСтр("ru = 'При обработке входящего файла произошла ошибка: %1%2'");
       Ошибка = ОписаниеОшибки();
       ПолныйТекстОшибки = СтрШаблон(ТекстОшибки, Символы.ПС, Ошибка);
       ВызватьИсключение ПолныйТекстОшибки;
   КонецПопытки;
КонецПроцедуры

Функция ВосстановлениеСвойств(Свойство, Тип, Значение, ДополнительныеПараметры) Экспорт // функция восстановления
   Фабрика = Значение.Фабрика();
   Если НРег(Свойство) = "date" Тогда
       Попытка
           Дата = Дата(Значение.Значение);
       Исключение
           ТекстОшибки = НСтр("ru = 'В поле %1 должно быть значение с типом Дата в формате дд.ММ.гггг ЧЧ:мм:сс'");
           ВызватьИсключение СтрШаблон(ТекстОшибки, Свойство);
       КонецПопытки;

       Возврат Фабрика.Создать(Тип, Дата);
   ИначеЕсли НРег(Свойство) = "name" Тогда
       Если Не ЗначениеЗаполнено(Значение.Значение) Тогда
           ТекстОшибки = НСтр("ru = 'Поле %1 должно быть заполнено'");
           ВызватьИсключение СтрШаблон(ТекстОшибки, Свойство);
       КонецЕсли;

       Возврат Фабрика.Создать(Тип, Значение.Значение);
   КонецЕсли;
КонецФункции

XDTO-пакет (сохранить в файл с расширение xsd и импортировать в пакет в конфигураторе 1C 8.3):
<xs:schema xmlns:tns="http://www.koder.by" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.koder.by" attributeFormDefault="unqualified" elementFormDefault="qualified">
  <xs:simpleType name="dateTime">
     <xs:union memberTypes="xs:string xs:dateTime"/>
  </xs:simpleType>
   <xs:complexType name="Test">
     <xs:sequence>
        <xs:element name="Objects" maxOccurs="5">
           <xs:complexType>
              <xs:sequence>
                 <xs:element name="Date" type="tns:dateTime"/>
                 <xs:element name="Number" type="xs:int" nillable="true"/>
                 <xs:element name="Name" type="xs:string" minOccurs="0"/>
              </xs:sequence>
           </xs:complexType>
        </xs:element>
     </xs:sequence>
  </xs:complexType>
</xs:schema>
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 07.09.2023
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому