【发布时间】:2015-08-01 16:08:07
【问题描述】:
我有一个定义疾病通知数据的 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 架构已在网站 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字段是不必要的。
【问题讨论】:
标签: json validation jsonschema