我正在尝试为屏幕上的控件构建一个json架构。我将控件(controltype)限制为枚举,并为所有控件添加了所有可能的属性。 问题是并非所有属性都与所有控件相关。 在我的例子中:"选项"财产与" SectionTitle"无关。控制类型,但它与" Dropdown"。
相关{
"controls": {
"type": "array",
"$id": "/properties/data/properties/metadata/properties/page/properties/controls",
"properties": {
"controlType": {
"type": "string",
"enum": ["SectionTitle",
"Dropdown",
"CustomButton"],
"$id": "/properties/data/properties/metadata/properties/page/properties/controls/items/properties/controlType",
"title": "The Controltype Schema.",
"description": "The name of the control",
"default": "",
"examples": ["Dropdown"]
},
"id": {
"type": "integer",
"$id": "/properties/data/properties/metadata/properties/page/properties/controls/items/properties/id",
"title": "The Id Schema.",
"description": "Unique identifier",
"default": 0,
"examples": [10]
},
"name": {
"type": "string",
"$id": "/properties/data/properties/metadata/properties/page/properties/controls/items/properties/name",
"title": "The Name Schema.",
"description": "Unique identifier",
"default": 0,
"examples": [""]
},
"options": {
"type": "array",
"$id": "/properties/options",
"items": {
"type": "object",
"$id": "/properties/options/items",
"properties": {
"title": {
"type": "string",
"$id": "/properties/options/items/properties/title",
"title": "The Title Schema.",
"description": "Display value of the presented options in the control",
"default": "",
"examples": ["Yes"]
},
"value": {
"type": "boolean",
"$id": "/properties/options/items/properties/value",
"title": "The Value Schema.",
"description": "Enum value of the presented options in the control",
"default": false,
"examples": [true]
},
"sequence": {
"type": "integer",
"$id": "/properties/options/items/properties/sequence",
"title": "The Sequence Schema.",
"description": "Unique. Determine the location of the value",
"default": 0,
"examples": [10]
}
}
}
}
}
}
}
答案 0 :(得分:0)
IF..Then..Else
new in Draft-07 {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"controlType": {
"type": "string",
"enum": ["title", "dropdown", "button"]
},
"options:": {
"type": "array",
"items": {"type": "string"}
}
},
"if": {
"properties": {
"controlType": {"const": "dropdown"}
}
},
"then": {
"required": ["options"]
}
}
}
oneOf
或anyOf
如果您的属性的可接受值数量有限(例如枚举),但是每个可能的值都需要单独映射,则此功能很有用。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "array",
"items": {
"type": "object",
"properties": {
"controlType": {
"type": "string",
"enum": ["title", "dropdown", "button"]
},
"options:": {
"type": "array",
"items": {"type": "string"}
}
},
"anyOf": [
{
"properties": {
"controlType": {"const": "dropdown"}
},
"required": ["controlType", "options"]
},
{
"properties": {
"controlType": {"const": "title"}
},
"required": ["controlType"]
},
{
"properties": {
"controlType": {"const": "button"}
},
"required": ["controlType"]
}
]
}
}