如何在 json 模式中定义替代结构
how to define alternative structure in json schema
我有 JSON 个看起来像这样的文件:
{
"api": "http://my.api.host",
"modules": [
"core", "module", "another"
]
}
或者这个:
{
"api": "http://my.api.host",
"modules": "*"
}
请注意,modules
属性的值可以是数组,也可以是 *
字符串。我怎样才能在 JSON 模式中做到这一点?使用无价的 http://jsonschema.net/ 我创建了以下仅验证数组的结构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://jsonschema.net",
"type": "object",
"additionalProperties": true,
"properties": {
"api": {
"id": "http://jsonschema.net/api",
"type": "string",
"minLength": 1
},
"modules": {
"id": "http://jsonschema.net/modules",
"type": "array",
"minItems": 1,
"uniqueItems": false,
"additionalItems": true,
"items": {
"id": "http://jsonschema.net/modules/2",
"type": "string",
"minLength": 1
}
}
},
"required": [
"api",
"modules"
]
}
如何在 JSON 架构中进行替代?
我找到了答案,基于另一个(略有不同)SO question. The solution is to use anyOf
,它可以定义至少一个必须匹配的替代子模式。我的案例的示例解决方案是:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://jsonschema.net",
"type": "object",
"additionalProperties": true,
"properties": {
"api": {
"id": "http://jsonschema.net/api",
"type": "string",
"minLength": 1
},
"modules": {
"id": "http://jsonschema.net/modules",
"anyOf": [{
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"id": "http://jsonschema.net/modules/2",
"type": "string",
"minLength": 1
}
}, {
"type": "string",
"minLength": 1
}]
}
},
"required": [
"api",
"modules"
]
}
我有 JSON 个看起来像这样的文件:
{
"api": "http://my.api.host",
"modules": [
"core", "module", "another"
]
}
或者这个:
{
"api": "http://my.api.host",
"modules": "*"
}
请注意,modules
属性的值可以是数组,也可以是 *
字符串。我怎样才能在 JSON 模式中做到这一点?使用无价的 http://jsonschema.net/ 我创建了以下仅验证数组的结构:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://jsonschema.net",
"type": "object",
"additionalProperties": true,
"properties": {
"api": {
"id": "http://jsonschema.net/api",
"type": "string",
"minLength": 1
},
"modules": {
"id": "http://jsonschema.net/modules",
"type": "array",
"minItems": 1,
"uniqueItems": false,
"additionalItems": true,
"items": {
"id": "http://jsonschema.net/modules/2",
"type": "string",
"minLength": 1
}
}
},
"required": [
"api",
"modules"
]
}
如何在 JSON 架构中进行替代?
我找到了答案,基于另一个(略有不同)SO question. The solution is to use anyOf
,它可以定义至少一个必须匹配的替代子模式。我的案例的示例解决方案是:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://jsonschema.net",
"type": "object",
"additionalProperties": true,
"properties": {
"api": {
"id": "http://jsonschema.net/api",
"type": "string",
"minLength": 1
},
"modules": {
"id": "http://jsonschema.net/modules",
"anyOf": [{
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"id": "http://jsonschema.net/modules/2",
"type": "string",
"minLength": 1
}
}, {
"type": "string",
"minLength": 1
}]
}
},
"required": [
"api",
"modules"
]
}