架构用于包含标题属性的消息,然后是msg1
或msg2
的属性:
{
"$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,它们有不同的结构)
答案 0 :(得分:2)
$ref
以外的所有内容都会被忽略。
" $ ref"以外的任何成员在JSON参考对象中应该被忽略。
您可以通过将$ref
包裹在allOf
中来解决问题。
"allOf": [{"$ref": "#/definitions/header"}],