Внешняя компонента JSON-валидатор

wts: https://otus.ru/journal/schema-json-i-comments-chto-nuzhno-znat/ (в разделе "JSON Schema") или даже лучше: https://habr.com/ru/post/495766/.

Где может потребоваться: в тех ситуациях, когда нет уверен пользователь ности, что придет JSON с тем составом и форматом полей или коллекций, который ожидается. Например, когда информация получается от неопределенного круга источников или когда нет уверен пользователь ности в источнике.

Короче, согласно https://json-schema.org/, benefits такие:
1.Describes your existing data format(s).
2. Provides clear human- and machine- readable documentation.
3. Validates data which is useful for:
    3.1 Automated testing.
    3.2 Ensuring quality of client submitted data.

Пример использования.

&НаКлиенте
Процедура JVD_validate(Команда)
    
    УстановитьВнешнююКомпоненту("ОбщийМакет.C1ExternTools");
	Рез = ПодключитьВнешнююКомпоненту("ОбщийМакет.C1ExternTools", "test", ТипВнешнейКомпоненты.Native);

	ВК =  Новый("AddIn.test.ExternToolsDRV");

    Схема = "{
    |""$id"": ""tsdGoodsPosting"",
    |""description"": ""Данные о товаре, поступившем на точку в рамках маршрутного листа"",
    |""type"": ""object"",
    |""properties"": {
    |    ""ДатаДок"": {
    |        ""type"": ""string"",
    |        ""pattern"": ""^20\\d{6}$""
    |    },
    |    ""НомерДок"": {
    |        ""type"": ""string""
    |    },
    |    ""Товары"": {
    |        ""type"": ""array"",
    |        ""items"": {
    |            ""$ref"": ""#/definitions/good""
    |        }
    |    }
    |},
    |""definitions"": {
    |    ""good"": {
    |        ""type"": ""object"",
    |        ""required"": [
    |            ""Товар_КодНСИ"",
    |            ""ЕИ""
    |        ],
    |        ""properties"": {
    |            ""Товар_КодНСИ"": {
    |                ""type"": ""string"",
    |                ""description"": """"
    |            },
    |            ""ЕИ"": {
    |                ""type"": ""string"",
    |                ""description"": """"
    |            }
    |        }
    |    }
    |}
    |}";
    
    
    ДанныеОк = "
    |{
    |""ДатаДок"": ""20221125"",
    |""НомерДок"": ""005-00001315"",
    |""Товары"": [
    |    {
    |        ""Товар_КодНСИ"": ""90000013"",
    |        ""ЕИ"": """"
    |    },
    |    {
    |        ""Товар_КодНСИ"": ""90012291"",
    |        ""ЕИ"": """"
    |    }
    |]
    |}";
    
    стрДжей = 	ВК.JVD_Проверить(Схема, ДанныеОк);
    
    стк = JSON.РазобратьJSON(стрДжей);
    
    ПоказатьПредупреждение(,стрДжей);
    
    ДанныеНЕОк = "
    |{
    |""ДатаДок"": ""30221125"",
    |""НомерДок"": ""005-00001315"",
    |""Товары"": [
    |    {
    |        ""Товар_КодНСИ"": ""90000013"",
    |        ""ЕИ"": """"
    |    },
    |    {
    |        ""Товар_КодНСИ"": ""90012291""
    |    }
    |]
    |}";
    
    стрДжей = 	ВК.JVD_Проверить(Схема, ДанныеНЕОк);
    
    стк = JSON.РазобратьJSON(стрДжей);
    
    ПоказатьПредупреждение(,стрДжей);
Конец внешние компонентыПроцедуры

ОТВЕТЫ:
1. {"Data":"","Description":["OK"],"Status":true}
2. {"Data":"","Description":["Отсутствует обязательное поле 'ЕИ'. Объект: <root> --> [Товары] --> [1]","Провалена валидация значения на соответствие выражению RegEx. Объект: <root> --> [ДатаДок]"],"Status":false}

ИМХО технология - огонь. В среде 1с, она не слишком известна и востребована. Однако, быстрая валидация json по схемам очень будет полезной при обмене через rest+json.

P.S. Библиотеки jsoncpp и valijson переведены мной на русский язык в одно лицо, так-что прошу прощения, если где-то перевод не слишком точен.

P.P.S. ВК для Android здесь: https://infostart.ru/public/1544296/

Тестировалось на платфорплатформам управленияе: 8.3.20.1674

Исходники: https://github.com/KotVezdehod/ExternToolsDRV

Скриншоты


1.PNG

Файлы

Наименование Файл Версия Размер Кол. Скачив.
Внешняя компонента JSON-валидатор.:
.zip 279,28Kb
2
.zip 279,28Kb 2 Скачать

Полная версия

© ООО "Инфостарт", 2006-2023 www.infostart.ru