给出此示例JSON:
{
"type": "number",
"values": [ 34, 42, 99 ]
}
是否可以定义JSON模式,以确保
values
数组是另一个属性中指定的类型(在本示例中为type
)?
type
上方的内容是数组values
只能包含整数(使用说明符“数字”)。
或指定values
包含字符串:
{
"type": "string",
"values": [ "hello", "world" ]
}
答案 0 :(得分:0)
是的,您可以使用“ items”关键字。如果它只有一个值,那么该值就是数组中每个元素的架构。
{
"type": "array",
"items": { "type: "string" }
}
假设您像大多数人一样使用草稿4模式,the specification的8.2.3.1节指出:
8.2.3.1。如果“ items”是模式
如果items是架构,则子实例必须对 此架构,无论其索引如何,以及其值如何 “ additionalItems”。
答案 1 :(得分:0)
是的,但是您必须为每种要支持的类型编写一个if/then
块。
理解JSON模式中有一个关于if/then/else
的部分:http://json-schema.org/understanding-json-schema/reference/conditionals.html
以下是摘录,解释了if/then/else
的工作原理。
例如,假设您要编写一个架构来处理 美国和加拿大的地址。这些国家有 不同的邮政编码格式,我们想选择哪种格式 根据国家/地区进行验证。如果地址在美国 州,postal_code字段是一个“邮政编码”:五个数字 然后是可选的四位数后缀。如果地址在 加拿大,postal_code字段是一个六位数的字母数字字符串,其中 字母和数字交替显示。
{
"type": "object",
"properties": {
"street_address": {
"type": "string"
},
"country": {
"enum": ["United States of America", "Canada"]
}
},
"if": {
"properties": { "country": { "const": "United States of America" } }
},
"then": {
"properties": { "postal_code": { "pattern": "[0-9]{5}(-[0-9]{4})?" } }
},
"else": {
"properties": { "postal_code": { "pattern": "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" } }
}
}
对于每种要支持的类型,您都需要编写if/then
对象,并将它们全部包装在allOf
中。