Схема JSON не проверяет отсутствующие свойства

Заранее благодарны за Вашу помощь. Это мой плохой день.

У меня есть следующий json, и я пытаюсь выяснить для него схему. К сожалению, я застрял в точке без каких-либо признаков ошибки.

Посоветуйте пожалуйста решение

{
    "tables_not_to_mask": ["Table_1"],
    "tables_to_mask":{
        "Table_2": [
            {
                "column": "BinLogFilename",
                "masking_type": "replace_logfilename"
            },
            {
                "column": "ServerId",
                "masking_type": "replace_server_id"
            }
        ],
        "Table_3": [
            {
                "column": "BinLogFilename",
                "masking_type": "replace_logfilename"
            },
            {
                "column": "ServerId",
                "masking_type": "replace_server_id"
            }
        ]
     }
}

Table_1, Table_2, .. добавляются динамически. Я создал схему, которая должна проверять ввод JSON следующим образом:

  1. tables_not_to_mask и tables_to_mask обязательны.
  2. table_to_mask может иметь ноль или более таблиц
  3. Если есть таблица в tables_to_mask, она может иметь столбец от нуля до многих и masking_type.
  4. column и masking_type являются обязательными, и никто не является одиноким.

Я создал для него схему, и, к сожалению, если я удалю столбец или masking_type, схема не выдаст никаких ошибок.

    {
    "title": "Schema title",
    "description": "Description of the schema",
    "type": "object",
    "properties": {
        "tables_not_to_mask": {
            "type": "array",
            "minItems": 0,
            "items": {"type": "string"}
        },
        "tables_to_mask": {
            "type": "object",
            "patternProperties": {
                ".*": {
                    "type": "array",
                    "minItems": 0,
                    "properties": {
                        "column": {"type": "string"},
                        "masking_type": {"type": "string"}
                    },
                    "required": [
                        "masking_type",
                        "column"
                    ]
                }
            }
        }
    },
    "required": [
        "tables_not_to_mask",
        "tables_to_mask"
    ]
}

person Hari    schedule 30.12.2020    source источник


Ответы (1)


Наконец-то я получил ответ. Спасибо, что изучили это.

 {
    "$schema": "https://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "tables_not_to_mask":
        {"$ref": "#/definitions/tables_not_to_mask_type"},
        "tables_to_mask":
        {"$ref": "#/definitions/tables_to_mask_type"}
    },
    "required": [
        "tables_not_to_mask",
        "tables_to_mask"
    ],
    "definitions": {
        "tables_not_to_mask_type": {
            "type": "array",
            "minItems": 0,
            "items": {"type": "string"}
        },
        "tables_to_mask_type": {
            "type": "object",
            "patternProperties": {
                ".*": {"$ref": "#/definitions/tables_type"}
            }
        },
        "tables_type": {
            "type": "array",
            "minItems": 0,
            "items": {
                "type": "object",
                "properties": {
                    "column": {"type": "string"},
                    "masking_type": {"type": "string"}
                },
                "required": [
                    "masking_type",
                    "column"
                ]
            }
        }
    }
}
person Hari    schedule 31.12.2020