JSON Schema oneOf不能使用引用

时间:2016-11-03 11:04:21

标签: json validation jsonschema

架构用于包含标题属性的消息,然后是msg1msg2的属性:

{
    "$schema": "http://json-schema.org/draft-04/schema#",

    "definitions": {
        "header": {
            "type": "object",
            "properties": {
                "token":         { "type": "string" },
                "id":            { "type": "number" }
            },
            "required": ["token", "id"]
        },
        "msg1": {
            "type": "object",
            "properties": {
                "content1":         { "type": "string" }
            },
            "required": ["content1"]
        },
        "msg2": {
            "type": "object",
            "properties": {
                "content2":         { "type": "string" }
            },
            "required": ["content2"]
        }
    },

    "type": "object",
    "$ref": "#/definitions/header",
    "oneOf": [
       {"$ref": "#/definitions/msg1" },
       {"$ref": "#/definitions/msg2" }
    ]
}

所以这应该通过:

{
    "token": "abc123",
    "id": 333,
    "content1": "s"
}

问题在于以下内容:

{
    "token": "abc123",
    "id": 333
}

如何解决?

(当然,还有更多的msg# s,它们有不同的结构)

1 个答案:

答案 0 :(得分:2)

$ref以外的所有内容都会被忽略。

  

" $ ref"以外的任何成员在JSON参考对象中应该被忽略。

     

您可以通过将$ref包裹在allOf中来解决问题。

"allOf": [{"$ref": "#/definitions/header"}],