json-schema v4 如何根据枚举实现枚举?
json-schema v4 how-to implements enums depending on enums?
使用 json-editor, and looking at this answer,我正在尝试执行以下操作,使用 json-schema v4:
使用根 属性 到 select 两个类别之一 ['clothing', 'accessory']
,这将确定 material
属性 的枚举值。
我试图解决的案例有多个枚举属性,具体取决于 category
值。
伪代码示例:
{
"type": "object",
"Title": "Products",
"definitions": {
"clothing": {
"materials": ["yak", "merino"]
},
"accessories": {
"materials": ["brass", "silver"]
}
},
"properties": {
"productType": {
"type": "string",
"enum": [
"clothing",
"accessories"
]
},
"materials": {
"type": "array",
"title": "Materials",
"items": {
"type": "string",
"title": "Material",
"enum": [
{"$ref" : "#definitions/{{productType}}/materials"}
]
}
}
}
}
关于如何构建它有什么建议吗?
在这种情况下,使用 oneOf
子句为第一层定义类型并仅在嵌套层中使用枚举可能更容易。类似于:
"definitions" : {
"materialType" : {
"oneOf" : [{
"$ref" : "#definitions/clothing"
}, {
"$ref" : "#definitions/accesories"
}
]
},
"clothing" : {
"materials" : {
"enum" : ["yak", "merino"]
}
},
"accessories" : {
"materials" : ["enum" : ["brass", "silver"]]
}
}
然后你这样消费materialType
:
"materials": {"$ref":"#definitions/materialType"}
如果您还想在对象实例中对 materialType
进行编码,那么您可以像这样添加另一个 属性 枚举,但我不推荐这样做:
"clothing" : {
"materials" : {
"enum" : ["yak", "merino"]
},
"kind": {"enum" : ["clothing"]}
}
使用 json-editor, and looking at this answer,我正在尝试执行以下操作,使用 json-schema v4:
使用根 属性 到 select 两个类别之一 ['clothing', 'accessory']
,这将确定 material
属性 的枚举值。
我试图解决的案例有多个枚举属性,具体取决于 category
值。
伪代码示例:
{
"type": "object",
"Title": "Products",
"definitions": {
"clothing": {
"materials": ["yak", "merino"]
},
"accessories": {
"materials": ["brass", "silver"]
}
},
"properties": {
"productType": {
"type": "string",
"enum": [
"clothing",
"accessories"
]
},
"materials": {
"type": "array",
"title": "Materials",
"items": {
"type": "string",
"title": "Material",
"enum": [
{"$ref" : "#definitions/{{productType}}/materials"}
]
}
}
}
}
关于如何构建它有什么建议吗?
在这种情况下,使用 oneOf
子句为第一层定义类型并仅在嵌套层中使用枚举可能更容易。类似于:
"definitions" : {
"materialType" : {
"oneOf" : [{
"$ref" : "#definitions/clothing"
}, {
"$ref" : "#definitions/accesories"
}
]
},
"clothing" : {
"materials" : {
"enum" : ["yak", "merino"]
}
},
"accessories" : {
"materials" : ["enum" : ["brass", "silver"]]
}
}
然后你这样消费materialType
:
"materials": {"$ref":"#definitions/materialType"}
如果您还想在对象实例中对 materialType
进行编码,那么您可以像这样添加另一个 属性 枚举,但我不推荐这样做:
"clothing" : {
"materials" : {
"enum" : ["yak", "merino"]
},
"kind": {"enum" : ["clothing"]}
}