Json模式 - 需要oneOf字段

时间:2016-06-16 03:54:27

标签: json jsonschema json-schema-validator

我需要oneOf value和value_num作为必填字段而不是两者都存在。这些选项都不适用于我。我尝试添加“additionalProperties”:false.Tried删除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,

2 个答案:

答案 0 :(得分:3)

您的oneOf应该是这样的

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

这表示必须要么是“value”或“value_num”,而不是两者都需要。

答案 1 :(得分: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}
    }
]

}