我有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模式中替代?
答案 0 :(得分:2)
我找到了答案,基于另一个(略有不同)SO question。解决方案是使用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"
]
}