如何在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,真的)。
答案 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
并遵循您的约定。
请注意,您不会在典型的面向对象编程语言(java
,C#
)继承语义和JSON-schema
之间找到等效的转换。