1С 8.3 Валидация JSON через XDTO
Данные > Примеры кода 1С > 1С 8.3 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 = Фабрика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
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник