Схема JSON для строгих объектов в массиве - PullRequest
0 голосов
/ 08 февраля 2019

Я создал схему JSON для проверки простого файла JSON.Хорошая новость заключается в том, что он проверяется так, как я задумал, в том смысле, что любое количество элементов бронирования может отображаться в любом порядке, и никакие дополнительные свойства не разрешены для каждого типа элемента бронирования.

В идеале я хотел быудалить полный список возможных свойств в объекте bookingElement (id, type, depair, destair, city) в схеме JSON и просто оставить списки oneOf, которые ясно показывают, какие поля разрешены для каждого элемента другого типа.

Может ли кто-нибудь предоставить версию схемы без этого полного списка, в которой все еще применяются строгие правила?

Это JSON:

{
    "bookingElements": [
        {
            "id" : "00003",
            "type" : "flight",
            "depair" : "LHR",
            "destair" : "CDG"
        },
        {
            "id" : "00008",
            "type" : "hotel",
            "city" : "Paris"
        }
    ]
}

Схема:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "bookingElements": {
            "type": "array",
            "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    },
                    "depair": {
                        "type": "string"
                    },
                    "destair": {
                        "type": "string"
                    },
                    "city": {
                        "type": "string"
                    }
                },
                "oneOf": [
                    {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            },
                            "depair": {
                                "type": "string"
                            },
                            "destair": {
                                "type": "string"
                            }
                        }
                    },
                    {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            },
                            "city": {
                                "type": "string"
                            }
                        }
                    }
                ]
            }
        }
    },
    "required": [
        "bookingElements"
    ]
}

В идеале схема JSON должна выглядеть примерно так:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "additionalProperties": false,
    "properties": {
        "bookingElements": {
            "type": "array",
            "items": {
                "type": "object",
                "additionalProperties": false,
                "oneOf": [
                    {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            },
                            "depair": {
                                "type": "string"
                            },
                            "destair": {
                                "type": "string"
                            }
                        }
                    },
                    {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "type": {
                                "type": "string"
                            },
                            "city": {
                                "type": "string"
                            }
                        }
                    }
                ]
            }
        }
    },
    "required": [
        "bookingElements"
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...