Надстройка над крейтом jsonschema для 1С
Поддерживаются схемы:
- Draft 4
- Draft 6
- Draft 7
- Draft 2019-09
- Draft 2020-12
В случае если может произойти исключение, в описании ставится знак
Использование:
Только чтение.
Описание:
Тип: Строка
Хранит главную схему с помощью которой будет происходить валидация JSON с помощью методов компоненты
Использование:
Чтение и запись.
Описание:
Тип: Строка
Содержит формат ошибки проверки JSON с помощью метода проверить. Шаблон по умолчанию "{path}"
Доступные шаблоны для подстановки:
- {error} - Описывает какое значение и по какой причине не прошло валидацию
- {path} - Путь к значению, которое не прошло проверку
- {instance} - Значение свойства, которое не прошло проверку
- {schema_path} - Путь к ключевому слову JSON Schema, которое не прошло проверку
Пример:
ОбъектКомпоненты.Формат = "Тут вот такая ошибка: {error}";
// Элемент массива ошибок метода "проверить" будет:
// "Тут вот такая ошибка: "123" does not match "^[0-9]{4}$""
Использование:
Чтение и запись.
Описание:
Тип: Булево
Признак использования дополнительных форматов в ключевом слове "format"
Значение по умолчанию:
Истина
Доступны дополнительные форматы строки:
- uuid - формат из спецификации JsonSchema 2019-09. Будет удален после включения в компоненту Draft 2019-09
- ru-inn-individual - ИНН физ лица. Производит валидацию ИНН с проверкой контрольной суммы и т.д.
- ru-inn-legal-entity - ИНН юр. лица. Производит валидацию ИНН с проверкой контрольной суммы и т.д.
- kz-iin - ИИН физ. лица Казахстана. Производит валидацию ИИН с проверкой контрольной суммы и т.д.
Использование:
Только чтение
Описание:
Тип: Строка
Содержит версию компоненты
Использование:
Чтение и запись.
Значение по умолчанию: Истина
Если установить значение Ложь, то при использовании метода УстановитьОсновнуюCхему будет произведена проверка на существование указанного формата в поле format. Если формат не существует, будет сгенерировано исключение
Синтаксис:
Действителен(<JSON>)
Параметры:
<JSON> (обязательный)
Тип: Строка.
JSON для проверки.
Описание
Проверяет JSON на соответствие схеме без описания ошибки валидации
Возвращаемое значение:
Булево - Результат проверки
Причины исключений:
- Не удалось преобразовать аргумент функции в строку
- Не удалось преобразовать аргумент функции в JSON
- Не установлена основная схема JSON
Синтаксис:
ДобавитьСхему(<Схема>)
Параметры:
<Схема> (обязательный)
Тип: Строка.
Схема JSON
Описание
Добавляет дополнительную схему от которой зависит основная схема
Причины исключений:
- Не удалось преобразовать аргумент функции в строку
- Не удалось преобразовать аргумент функции в JSON
- В схеме не найден ключ $id
- Значение $id не является строкой
- Значение $id не удалось преобразовать в URI
Синтаксис:
УдалитьСхему(<URI>)
Параметры:
<URI> (обязательный)
Тип: Строка.
URI дополнительной схемы
Описание
Процедура удаляет дополнительную схему из колллекции доп. схем по переданному URI. Если передан несуществующий URI, ничего не происходит
Причины исключений:
- Не удалось преобразовать аргумент функции в строку
- Не удалось преобразовать аргумент функции в URI
Синтаксис:
УдалитьВсеСхемы()
Описание
Очищает коллекцию дополнительных схем
Синтаксис:
ПолучитьПоследнююОшибку()
Возвращаемое значение:
Строка, Неопределено - Описание последней ошибки. Если ошибка не происходила, то возвращаемое значение Неопределено
Описание
Возвращает описание последней произошедшей ошибки. Функцию стоит вызывать сразу после возникновения исключение. Каждое исключение перезаписывает ошибку
Синтаксис:
Проверить(<JSON>, <БуферОшибок>)
Параметры:
<JSON> (обязательный)
Тип: Строка.
JSON для проверки
БуферОшибок (обязательный)
Тип: Строка.
Аргумент куда будут записаны ошибки валидации JSON в виде массива строк JSON. Каждый элемент массива будет в формате из свойства Формат
Возвращаемое значение:
Булево - Результат проверки
Описание:
Проверяет JSON на соответствие схеме с описанием ошибок валидации
Причины исключений:
- Не удалось преобразовать первый аргумент функции в строку
- Не удалось преобразовать первый аргумент функции в JSON
- Не установлена схема
Синтаксис:
УстановитьОсновнуюСхему(<Схема>)
Параметры:
<Схема> (обязательный)
Тип: Строка.
JSON схема
Описание:
Устанавливает и компилирует JSON схему с помощью которой будет происходить валидация методами Проверить и Действителен.
Вызов этого метода учитывает установленные значения свойств ИгнорироватьНеизвестныеформаты и ИспользоватьДопФорматы и изменение значения этих свойств не повлияет на уже скомилированную схему. Для того чтобы схема учитвала эти свойства, необходимо повторно установить основную схему этим методом
Причины исключений:
- Не удалось преобразовать первый аргумент функции в строку
- Не удалось преобразовать первый аргумент функции в JSON
- Не удалось скомпилировать схему
Процедура ПроверитьТелоЗапроса()
КомпонентаПодключена = ПодключитьВнешнююКомпоненту(ПутьККомпоненте(), "JsonСхема",
ТипВнешнейКомпоненты.Native, ТипПодключенияВнешнейКомпоненты.НеИзолированно);
Если Не КомпонентаПодключена Тогда
Возврат;
КонецЕсли;
КомпонентаОбъект = Новый ("AddIn.JsonСхема.JsonSchema1C");
// Инициализация доп схемы
Попытка
КомпонентаОбъект.ДобавитьСхему(ДополнительнаяСхема());
Исключение
Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
КонецПопытки;
// Информация о версии
Сообщить(КомпонентаОбъект.Версия);
// Отключение доп. форматов
КомпонентаОбъект.ИспользоватьДопФорматы = Ложь;
// Установка основной схемы
Попытка
КомпонентаОбъект.УстановитьОсновнуюСхему(ОсновнаяСхема());
Исключение
Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
Возврат;
КонецПопытки;
// Установка формата вывода
КомпонентаОбъект.Формат = "Вот такая вот ошибка {error} вот здесь: {path}";
// Быстрая проверка
Попытка
Сообщить(КомпонентаОбъект.Действителен(JSONДляПроверки()));
Исключение
Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
КонецПопытки;
// Подробная проверка
// Буфер в любом случае будет преобразован в строку
БуферОшибок = Неопределено;
Попытка
КомпонентаОбъект.Проверить(JSONДляПроверки(), БуферОшибок);
Исключение
Сообщить(КомпонентаОбъект.ПолучитьПоследнююОшибку());
КонецПопытки;
Сообщить(БуферОшибок);
КонецПроцедуры
Функция ОсновнаяСхема()
Возврат "{
| ""type"": ""object"",
| ""properties"": {
| ""person"": {
| ""$ref"": ""https://example.com/person_schema""
| }
| },
| ""required"": [""person""]
|}";
КонецФункции
Функция ДополнительнаяСхема()
Возврат "{
| ""$id"": ""https://example.com/person_schema"",
| ""type"": ""object"",
| ""properties"": {
| ""name"": {
| ""type"": ""string""
| },
| ""age"": {
| ""type"": ""integer"",
| ""minimum"": 0
| }
| },
| ""required"": [""name"", ""age""]
|}
|";
КонецФункции
Функция JSONДляПроверки()
Возврат "{ ""person"": { ""name"": 123, ""age"": 30 } }";
КонецФункции
Функция ПутьККомпоненте()
Возврат "ПутьДоКомпоненты";
КонецФункции
Вывод:
0.1.0
Нет
["Вот такая вот ошибка 123 is not of type \"string\" вот здесь: /person/name"]