等于xsi:在JSON模式中输入

时间:2015-11-10 10:01:12

标签: json jsonschema

如何在JSON Schema中提示嵌入对象的类型,类似于XML Schema中的xsi:type

示例架构文档:

{
    "type": "storeRequest",
    "properties": {
        "txid": {
            "description": "Transaction ID to prevent double committing",
            "type": "integer"
        },
        "objects": {
            "description": "Objects to store",
            "type": "array"
            "items": {
                "type": "object"
            },
            "minItems": 1,
            "uniqueItems": true
        },
    },
    "required": ["txid", "objects"]
}

这是客户端发送到服务器以在数据库中存储多个对象的请求。现在,当它可以包含多种类型的对象时,如何递归验证对象的内容。 (Plymorphism,真的)。

1 个答案:

答案 0 :(得分:1)

xsi:type AFAIK中没有等效JSON-schema。 也许用于提示类型存在的最JSON-schema惯用方法是将类型明确定义为模式并通过$ref引用它们:

{
    "properties" : {
        "wheels" : {
            "type" : "array",
            "items" : "$ref" : "#/definitions/wheel"
        }
    }

    "definitions" : {
        "wheel" : {
            "type" : "object"
        }
    }
}

另一种方法是通过枚举提示:

    {
    "definitions" : {
        "vehicle" : {
            "properties" : {
                "type" : {
                    "enum" : ["car", "bike", "plane"]
                }
            }
        },
        "plane" : {
            "properties" : {
                "type" : {
                    "enum" : "plane"
                }
            }
            "allOf" : ["$ref" : "#/definitions/vehicle"]
        }
     }
   }

最后,您还可以将可以处理的任何标记添加到JSON-schema并遵循您的约定。

请注意,您不会在典型的面向对象编程语言(javaC#)继承语义和JSON-schema之间找到等效的转换。