При использовании схемы JSON для проверки, это не рекурсивная проверка дочерних объектов? - PullRequest
1 голос
/ 07 марта 2019

При использовании следующей схемы

{
    "$schema": "http://json-schema.org/schema#",
    "definitions":{
        "entity": {
            "type": "object",
            "properties": {
                "parent": {"type": ["null","string"]},
                "exclude": {"type": "boolean"},
                "count": {"type": ["null","integer"]},
                "EntityType": {"type": "string"},
                "Children": {
                    "type": "array",
                    "items": {"$ref":"#/definitions/entity"}
                }
            }
        }
    },
    "required": ["parent","EntityType","count"]
}

В этом предоставленном теле JSON

{
    "parent": "null",
    "EntityType": "test",
    "count": "null",
    "Children": [
        {
            "EntityType": "test",
            "count": 3
        },
        {
            "EntityType": "test"
        }
    ],
    "Extra": "somevalue"
}

Должно быть возвращено, что я предоставил недопустимый объект Json, однако это не кажетсячтобы сделать это.

Тем не менее, если бы мне не удалось получить корневой узел не удалось (удалив одно из обязательных полей), проверка работает и говорит, что я не предоставил обязательное поле.Есть ли причина, по которой я не могу проверить JSON рекурсивно?

1 Ответ

2 голосов
/ 07 марта 2019

Похоже, вы хотите, чтобы parent, EntityType и count были обязательными свойствами определения entity. Однако они требуются только в корне, а не на уровне entity. Я бы посоветовал вам переместить ключевое слово required в определение entity, а затем сослаться на определение как на часть allOf, чтобы убедиться, что корень совместим.

{
    "$schema": "http://json-schema.org/schema#",
    "definitions":{
        "entity": {
            "type": "object",
            "properties": {
                "parent": {"type": ["null","string"]},
                "exclude": {"type": "boolean"},
                "count": {"type": ["null","integer"]},
                "EntityType": {"type": "string"},
                "Children": {
                    "type": "array",
                    "items": {"$ref":"#/definitions/entity"}
                }
            },
            "required": ["parent","EntityType","count"]
        }
    },
    "allOf": [{"$ref": "#/definitions/entity"}]
}
...