这是我修改过的问题,我借用的是我在其中一个问题中学到的同样的知识。我在这个问题的末尾添加了我的模式& JSON。
条件:
所以这个条件是有效的:
这里的数组是"stat_data": {},{},{}
这个条件是无效的:
JSON模式
{
"$schema": "http://json-schema.org/draft-07/schema#",
"definitions": {
"Pencils": {
"contains": {
"properties": {
"region": {
"const": "some-pencil-region"
},
"details": {
"type": "object",
"required": [
"brand",
"year"
],
"properties": {
"brand": {
"type": "string"
},
"year": {
"type": "number"
}
}
}
}
}
},
"OilPastels": {
"contains": {
"required": [
"population"
],
"properties": {
"region": {
"const": "some-oil-pastels-region"
},
"details": {
"type": "object",
"properties": {
"size": {
"type": "number"
}
}
}
}
}
},
"containsAsia": {
"contains": {
"required": [
"population"
],
"properties": {
"region": {
"const": "asia"
},
"population": {
"type": "object",
"required": [
"year"
],
"properties": {
"year": {
"type": "number"
},
"change": {
"type": "number"
}
}
}
}
}
},
"containsEurope": {
"contains": {
"properties": {
"region": {
"const": "europe"
},
"tourist": {
"type": "number"
}
}
}
},
"containsAustralia": {
"contains": {
"properties": {
"region": {
"const": "australia"
},
"stadium": {
"type": "object",
"required": [
"year"
],
"properties": {
"year": {
"type": "number"
},
"area": {
"type": "number"
}
}
}
}
}
}
},
"type": "object",
"properties": {
"stat_data": {
"type": "array",
"minItems": 1,
"items": {
"type": "object"
},
"oneOf": [
{
"$ref": "#/definitions/Pencils"
},
{
"$ref": "#/definitions/OilPastels"
},
{
"allOf": [
{
"$ref": "#/definitions/containsAsia"
},
{
"not": {
"$ref": "#/definitions/containsEurope"
}
},
{
"not": {
"$ref": "#/definitions/containsAustralia"
}
}
]
},
{
"allOf": [
{
"$ref": "#/definitions/containsEurope"
},
{
"not": {
"$ref": "#/definitions/containsAsia"
}
},
{
"not": {
"$ref": "#/definitions/containsAustralia"
}
}
]
},
{
"allOf": [
{
"$ref": "#/definitions/containsAustralia"
},
{
"not": {
"$ref": "#/definitions/containsAsia"
}
},
{
"not": {
"$ref": "#/definitions/containsEurope"
}
}
]
}
]
}
}
}JSON (这是失败的)我尝试了我所有的验证,但都失败了。
{
"stat_data":[
{
"region":"some-pencil-region",
"details":{
"brand":"Camlin",
"year": 2019
}
},
{
"region":"asia",
"population":{
"year":2018,
"change":2
}
}
]
}10/06不验证强制属性LINK1
发布于 2019-10-05 07:49:24
我认为您需要使用一个if-然后-否则的流来实现这个目的:
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "JSON schema generated with JSONBuddy https://www.json-buddy.com",
"properties": {
"stat_data": {
"type": "array",
"if": {
"contains": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [ "europe" ]
}
}
}
},
"then": {
"not": {
"contains": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [ "asia", "australia" ]
}
}
}
}
},
"else": {
"if": {
"contains": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [ "asia" ]
}
}
}
},
"then": {
"not": {
"contains": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [ "europe", "australia" ]
}
}
}
}
},
"else": {
"if": {
"contains": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [ "australia" ]
}
}
}
},
"then": {
"not": {
"contains": {
"type": "object",
"properties": {
"region": {
"type": "string",
"enum": [ "europe", "asia" ]
}
}
}
}
},
"else": {
}
}
},
"items": {
"type": "object",
"properties": {
"details": {
"$ref": "#/definitions/details"
},
"population": {
"$ref": "#/definitions/population"
},
"region": {
"enum": [ "asia", "europe", "australia", "some-pencil-region", "some-oil-pastels-region" ]
}
}
}
}
},
"definitions": {
"details": {
"type": "object",
"properties": {
"brand": {
"type": "string"
},
"year": {
"type": "integer"
}
}
},
"population": {
"type": "object",
"properties": {
"change": {
"type": "integer"
},
"year": {
"type": "integer"
}
}
}
}
}https://stackoverflow.com/questions/58242502
复制相似问题