我有一个很长的JSON文档,我需要对这个模式进行验证。我有JSON的某些子部分,只有在有数据的情况下才需要验证。下面是我的JSON的一个子部分,只有当该小节中存在必需的数据时,我才试图验证它:
{
"Entity":{
"Base":{
"Key":"",
"SubmittedDate":"1/1/1900",
"Address":[
{
"Key":"",
"Type": ["Physical", "Mailing", "Primary", "Secondary"],
"LineOne":"123 here st",
"LineTwo": "",
"CountyOrigin":"",
"CityTown": "Anytown",
"StateProvidence": "CA",
"Country": "US",
"PostalCode": "33333"
}
]
}
}
}“地址”节点是有条件的。如果数组中有地址,我需要验证地址中存在所需的字段。它们的地址可能不存在,因为它不需要“基本”节点。下面是我开始的JSON模式:
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {},
"required": [
"Entity"
],
"properties": {
"Entity": {
"$id": "#/properties/Entity",
"type": "object",
"title": "The Entity schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"required": [
"Base"
],
"properties": {
"Base": {
"$id": "#/properties/Entity/properties/Base",
"type": "object",
"title": "The Base schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"required": [
"Key",
"SubmittedDate"
],
"properties": {
"Key": {
"$id": "#/properties/Entity/properties/Base/properties/Key",
"type": "string",
"title": "The Key schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"SubmittedDate": {
"$id": "#/properties/Entity/properties/Base/properties/SubmittedDate",
"type": "string",
"title": "The SubmittedDate schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"Address": {
"$id": "#/properties/Entity/properties/Base/properties/Address",
"type": "array",
"title": "The Address schema",
"description": "An explanation about the purpose of this instance.",
"default": [],
"additionalItems": true,
"items": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items",
"anyOf": [
{
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0",
"type": "object",
"title": "The first anyOf schema",
"description": "An explanation about the purpose of this instance.",
"default": {},
"required": [
"Type",
"LineOne",
"CountyOrigin",
"CityTown",
"StateProvidence",
"Country",
"PostalCode"
],
"properties": {
"Key": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Key",
"type": "string",
"title": "The Key schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"Type": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type",
"type": "array",
"title": "The Type schema",
"description": "An explanation about the purpose of this instance.",
"default": [],
"additionalItems": true,
"items": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type/items",
"anyOf": [
{
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type/items/anyOf/0",
"type": "string",
"title": "The first anyOf schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
}
]
}
},
"LineOne": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/LineOne",
"type": "string",
"title": "The LineOne schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"LineTwo": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/LineTwo",
"type": "string",
"title": "The LineTwo schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"CountyOrigin": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/CountyOrigin",
"type": "string",
"title": "The CountyOrigin schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"CityTown": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/CityTown",
"type": "string",
"title": "The CityTown schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"StateProvidence": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/StateProvidence",
"type": "string",
"title": "The StateProvidence schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"Country": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Country",
"type": "string",
"title": "The Country schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"PostalCode": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/PostalCode",
"type": "string",
"title": "The PostalCode schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
}
},
"additionalProperties": true
}
]
}
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"additionalProperties": true}
如果数组中有地址,我只想验证Address部分。我修改了架构中的required字段,使其不需要地址,并确保在address架构中存在所需的字段。如果我不添加和地址,它将验证,但如果我放入一个地址到数组,并遗漏了一个必需的字段的地址,它仍然有效。如果存在,我如何验证地址?
发布于 2020-09-25 13:52:56
我不确定我是否理解anyOf在地址项规范中的用途。如果你把它简化成这样:
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "http://example.com/example.json",
"type": "object",
"title": "The root schema",
"description": "The root schema comprises the entire JSON document.",
"default": {
},
"required": [
"Entity"
],
"properties": {
"Entity": {
"$id": "#/properties/Entity",
"type": "object",
"title": "The Entity schema",
"description": "An explanation about the purpose of this instance.",
"default": {
},
"required": [
"Base"
],
"properties": {
"Base": {
"$id": "#/properties/Entity/properties/Base",
"type": "object",
"title": "The Base schema",
"description": "An explanation about the purpose of this instance.",
"default": {
},
"required": [
"Key",
"SubmittedDate"
],
"properties": {
"Key": {
"$id": "#/properties/Entity/properties/Base/properties/Key",
"type": "string",
"title": "The Key schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"SubmittedDate": {
"$id": "#/properties/Entity/properties/Base/properties/SubmittedDate",
"type": "string",
"title": "The SubmittedDate schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"Address": {
"$id": "#/properties/Entity/properties/Base/properties/Address",
"type": "array",
"title": "The Address schema",
"description": "An explanation about the purpose of this instance.",
"default": [
],
"additionalItems": true,
"items": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items",
"type": "object",
"title": "Address item schema",
"description": "An explanation about the purpose of this instance.",
"default": {
},
"required": [
"Type",
"LineOne",
"CountyOrigin",
"CityTown",
"StateProvidence",
"Country",
"PostalCode"
],
"properties": {
"Key": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Key",
"type": "string",
"title": "The Key schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"Type": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type",
"type": "array",
"title": "The Type schema",
"description": "An explanation about the purpose of this instance.",
"default": [
],
"additionalItems": true,
"items": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type/items",
"anyOf": [
{
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type/items/anyOf/0",
"type": "string",
"title": "The first anyOf schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
}
]
}
},
"LineOne": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/LineOne",
"type": "string",
"title": "The LineOne schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"LineTwo": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/LineTwo",
"type": "string",
"title": "The LineTwo schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"CountyOrigin": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/CountyOrigin",
"type": "string",
"title": "The CountyOrigin schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"CityTown": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/CityTown",
"type": "string",
"title": "The CityTown schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"StateProvidence": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/StateProvidence",
"type": "string",
"title": "The StateProvidence schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"Country": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Country",
"type": "string",
"title": "The Country schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
},
"PostalCode": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/PostalCode",
"type": "string",
"title": "The PostalCode schema",
"description": "An explanation about the purpose of this instance.",
"default": ""
}
},
"additionalProperties": true
}
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}
},
"additionalProperties": true
}地址数据仍然是可选的,但如果提供,它将被验证。
https://stackoverflow.com/questions/64014040
复制相似问题