我有一个定义疾病通知数据的JSON模式。在我的情况下,我想存储疾病的数据和患者的住院数据。如果患有这种疾病的患者住院("hospitalized ": 1
)我也需要写医院的名字,但如果患者没有住院("hospitalized": 2
)我不需要有医院名称。这是我的JSON架构
{
"$schema":"http://json-schema.org/draft-04/schema#",
"title": "Notification",
"description": "Information about disease notification",
"type": "object",
"properties":{
"classification":{
"enum":[1,2,3,4]
},
"evolution":{
"enum":[1,2]
},
"hospitalization":{
"description":"Patient hospitalization data",
"type":"object",
"oneOf":[
{"$ref":"#/definitions/hospitalized_schema"},
{"$ref":"#/definitions/not_hospitalized_schema"}
]
}
},
"definitions":{
"hospitalized_schema:":{
"type":"object",
"properties":{
"hospitalized":{
"enum":[1]
},
"hospital":{
"description":"Hospital name",
"type":"string"
}
},
"required":["hospitalized","hospital"]
},
"not_hospitalized_schema":{
"type":"object",
"properties":{
"hospitalized":{
"enum":[2]
}
},
"required":["hospitalized"]
}
},
"required":["classification","evolution","hospitalization"]
}
JSON Schema已在网站JSON Schema Lint上验证。但是我无法验证以下JSON文件:
{
"classification":3,
"evolution":2,
"hospitalization": {
"hospitalized":2
}
}
在这种情况下,我得到no (or more than one) schemas match
错误,但我希望它有效,因为由于患者没有住院,hospitalized
值必须为2。
我的第二个JSON文件是
{
"classification":3,
"evolution":2,
"hospitalization": {
"hospitalized":1,
"hospital":"Hospital Name"
}
}
此JSON文件已正确验证,但如果我将hospitalized
的值更改为2该文件仍然有效,但它不正确,因为患者未住院("hospitalized": 2
)我的JSON文件不应该有hospital
字段。
如何修复这些错误?也就是说,确保当hospitalized
字段为1时,字段hospital
是必需的,当hospitalized
字段为2时,hospital
字段不是必需的。
答案 0 :(得分:0)
您的第一个测试用例不起作用的原因仅仅是由于#/definitions/hopitalized_schema
的拼写错误。它说hospitalized_schema:
而不是hospitalized_schema
。当您删除额外的:
时,它会按预期工作。
至于你的第二个测试用例,我建议你不要考虑让hospital
字段出现错误。使用JSON和JSON Schema时的最佳做法是忽略您不感兴趣的任何其他属性。在这种情况下,hospital
不相关,因此应该被忽略。
但是,如果hospital
为hospitalized
时2
属性不重要,那么您可以"not": { "required": ["hospital"] }
向#/definitions/not_hospitalized_schema
明确添加RequestHandler
要求它不存在。