首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSON模式条件验证草案7

JSON模式条件验证草案7
EN

Stack Overflow用户
提问于 2020-09-22 16:35:18
回答 1查看 278关注 0票数 0

我有一个很长的JSON文档,我需要对这个模式进行验证。我有JSON的某些子部分,只有在有数据的情况下才需要验证。下面是我的JSON的一个子部分,只有当该小节中存在必需的数据时,我才试图验证它:

代码语言:javascript
运行
复制
{
      "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模式:

代码语言:javascript
运行
复制
  {
    "$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架构中存在所需的字段。如果我不添加和地址,它将验证,但如果我放入一个地址到数组,并遗漏了一个必需的字段的地址,它仍然有效。如果存在,我如何验证地址?

EN

Stack Overflow用户

回答已采纳

发布于 2020-09-25 13:52:56

我不确定我是否理解anyOf在地址项规范中的用途。如果你把它简化成这样:

代码语言:javascript
运行
复制
{
  "$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
}

地址数据仍然是可选的,但如果提供,它将被验证。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64014040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档