【发布时间】:2020-04-11 23:06:43
【问题描述】:
基于给定的 JSON 模式,如果我必须根据在 DayHeader 中选择的“Day”为“DayActivity”构建“必需”(例如,如果 Day 是 SUNDAY,则应该只需要 PhysicalActivity),我该如何构建JSON模式?我尝试了各种方法,例如 if then else 和定义。当我基于 JSON 模式生成 JSON 文件时,它无法验证“Day”属性选择的所需“DayActivity”。 基本上我如何引用在其他属性中选择的值并构建“必需”?感谢您对此问题的任何参考。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"DayHeader": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"Day": {
"type": "string",
"enum": [
"SUNDAY",
"MONDAY",
"TUESDAY",
"WEDNESDAY",
"THURSDAY",
"FRIDAY",
"SATURDAY"
]
}
},
"required": [
"day"
]
},
"ActivityDetail": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"DayActivity": {
"type": "array",
"items": {
"type": "object",
"properties": {
"PhysicalActivity": {
"type": "string",
"enum": [
"Walking",
"Running"
]
},
"StudyActivity": {
"type": "string",
"enum": [
"Maths Class",
"Science Class"
]
},
"ArtActivity": {
"type": "string",
"enum": [
"Drawing",
"Dance"
]
}
}
}
}
}
}
}
}
【问题讨论】:
-
您能否提供一个您希望验证失败的示例 JSON 实例?那会让事情变得容易一些。另外:小心外壳。您在
DayHeader上定义了两个属性:“Day”和“day”(通过“required”)。DayActivity也是“必需的”并且“minItems”为 1 吗?只是将PhysicalActivity设为“必需”似乎会留下很多漏洞,因此仍然可以忽略它。这是故意的,还是你没有得到你想要的结果的原因。if/then听起来是正确的方法。也许在这里也包括你的尝试。 -
您不需要(也不应该)在架构根以外的任何级别重新定义
$schema。 -
这能回答你的问题吗? JSON Schema - conditional validation
-
@Carsten DayActivity 需要将 minItems 设为 1。
-
@Relequestual 感谢分享。我会尝试一下并更新这个帖子。
标签: json jsonschema