Схема Json - поля oneOf должны быть обязательными

Мне нужно, чтобы oneOf value и value_num присутствовали как обязательные поля, но не оба. Ни один из этих вариантов не работает для меня. Я попытался добавить «additionalProperties»: false. Попытался удалить объявления полей value и value_num.

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
    "observation": {
        "type": "array",
        "minItems": 1,
        "items": {
            "type": "object",
            "properties": {
                "timestamp": {
                    "type": "string",
                    "format": "date-time"
                },
                "eventType": {
                    "type": "string"
                },
                "value": {
                    "type": "object"
                },
                "value_num": {
                    "type": "number"
                }

            },
            "oneOf": [{
                "properties": {
                    "value": {
                        "type": "object"
                    },
                    "required": ["value"]
                }
            }, {
                "properties": {
                    "value_num": {
                        "type": "number"
                    },
                    "required": ["value_num"]
                }
            }],
            "required": [
                "timestamp",
                "eventType"
            ]
        }
    }
},
"required": [
    "observation"
]

}

Я попытался добавить oneOf в блок items.properties. Все, что я действительно хочу, это: "oneOf": [{"value", "value_num"}],

Любая помощь приветствуется.

ТИА,


person Vijay    schedule 16.06.2016    source источник


Ответы (2)


Ваш oneOf должен выглядеть так

"oneOf": [
  { "required": ["value"] },
  { "required": ["value_num"] }
]

Это говорит о том, что требуется либо "value", либо "value_num", но не оба.

person Jason Desrosiers    schedule 16.06.2016

Почти решил проблему следующим образом:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
    "observation": {
        "type": "array",
        "minItems": 1,
        "items": {
            "type": "object",
            "properties": {
                "timestamp": {
                    "type": "string",
                    "format": "date-time"
                },
                "eventType": {
                    "type": "string"
                },
                "value": {
                    "type": "object"
                },
                "value_num": {
                    "type": "number"
                }

            },
            "oneOf": [{"value": {
                    "type": "object"
                },
                "value_num": {
                    "type": "number"
                }}],
            "required": [
                "timestamp",
                "eventType"
            ]
        }
    }
},
"required": [
    "observation"
]

}

То, что он не делает недействительным, — это полезная нагрузка, подобная этой, где присутствуют как значение, так и значение_num, и только 1 должен присутствовать:

{
"info": {
    "deviceId": "482038028341324",
    "companionId": "asdfas76df76sdf",
    "userId": "1234"
},
"observation": [{
        "timestamp": "2013-12-31T23:59:59-01:00",
        "eventType": "BOOT_EVENT",
        "value_num": 6,
        "value": {"boot":true}
    }
]

}

person Vijay    schedule 16.06.2016