如何解决JSON模式条件验证草案7
我有一个很长的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","title": "The Entity schema","description": "An explanation about the purpose of this instance.","required": [
"Base"
],"properties": {
"Base": {
"$id": "#/properties/Entity/properties/Base","title": "The Base schema","required": [
"Key","SubmittedDate"
],"properties": {
"Key": {
"$id": "#/properties/Entity/properties/Base/properties/Key","type": "string","title": "The Key schema","default": ""
},"SubmittedDate": {
"$id": "#/properties/Entity/properties/Base/properties/SubmittedDate","title": "The SubmittedDate schema","Address": {
"$id": "#/properties/Entity/properties/Base/properties/Address","type": "array","title": "The Address schema","default": [],"additionalItems": true,"items": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items","anyOf": [
{
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0","title": "The first anyOf schema","required": [
"Type","LineOne","CountyOrigin","CityTown","StateProvidence","Country","PostalCode"
],"properties": {
"Key": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Key","default": ""
},"Type": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Type","title": "The Type schema","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","default": ""
}
]
}
},"LineOne": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/LineOne","title": "The LineOne schema","LineTwo": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/LineTwo","title": "The LineTwo schema","CountyOrigin": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/CountyOrigin","title": "The CountyOrigin schema","CityTown": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/CityTown","title": "The CityTown schema","StateProvidence": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/StateProvidence","title": "The StateProvidence schema","Country": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/Country","title": "The Country schema","PostalCode": {
"$id": "#/properties/Entity/properties/Base/properties/Address/items/anyOf/0/properties/PostalCode","title": "The PostalCode schema","default": ""
}
},"additionalProperties": true
}
]
}
}
},"additionalProperties": true
}
},"additionalProperties": true
}
},"additionalProperties": true
}
如果阵列中存在地址,我只想验证“地址”部分。我修改了模式中的require字段,使其不需要地址,并确保在地址模式中存在必填字段。如果我不添加地址,它将进行验证,但是如果我在数组中放入一个地址并为该地址保留一个必填字段,则该地址仍会验证。如果存在,我如何验证地址?
解决方法
我不确定我是否了解地址项目规范中$ time zstd --long enwik82 -f -o enwik82.long.zst
enwik82 : 17.82% (200000000 => 35644486 bytes,enwik82.long.zst)
real 0m0.911s
user 0m0.898s
sys 0m0.130s
$ time zstd enwik82 -f -o enwik82.zst
enwik82 : 35.63% (200000000 => 71251491 bytes,enwik82.zst)
real 0m1.208s
user 0m1.207s
sys 0m0.162s
的目的。如果您这样简化:
anyOf
地址数据仍然是可选的,但如果提供,它将被验证。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。