2

我需要 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"
]

}

我尝试在 items.properties 块中添加 oneOf 。我真正想要的是:"oneOf": [{"value", "value_num"}],

任何帮助表示赞赏。

TIA,

4

2 回答 2

4

oneOf应该看起来像这样

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

这表示必须要求“value”或“value_num”,但不能同时要求两者。

于 2016-06-16T06:48:07.160 回答
0

几乎解决了这样的问题:

{
"$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"
]

}

它不会失效的是像这样的有效负载,其中 value 和 value_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}
    }
]

}

于 2016-06-16T04:10:10.463 回答