首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON架构验证--从If中访问不同的属性

JSON架构验证--从If中访问不同的属性
EN

Stack Overflow用户
提问于 2022-11-03 23:57:21
回答 1查看 39关注 0票数 0

我希望你们能帮助我理解如何从一个If语句中从有效载荷的不同部分访问多个属性。下面我有一个例子。我遇到的问题是,我需要时间和其他语句来跨数组中每一项的内容工作。目前,它只在数组中只有一个项时才能工作。

模式:

代码语言:javascript
复制
{
    "if": {
        "allOf": [
            {
                "properties": {
                    "report_body": {
                        "properties": {
                            "afs_employee_director_rep": {
                                "items": {
                                    "properties": {
                                        "afs_emp_rep_Capacity": {
                                            "contains": {
                                                "const": "Current director of licensee"
                                            }
                                        }
                                    },
                                    "required": [
                                        "afs_emp_rep_Capacity"
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            {
                "properties": {
                    "report_body": {
                        "properties": {
                            "licensees_schemes_rep_involved": {
                                "properties": {
                                    "report_submit_licensee": {
                                        "const": "Yes"
                                    }
                                },
                                "required": [
                                    "report_submit_licensee"
                                ]
                            }
                        }
                    }
                }
            }
        ]
    },
    "then": {
        "properties": {
            "report_body": {
                "properties": {
                    "afs_employee_director_rep": {
                        "items": {
                            "required": [
                                "afs_emp_rep_verify"
                            ]
                        }
                    }
                }
            }
        }
    },
    "else": {
        "not": {
            "properties": {
                "report_body": {
                    "properties": {
                        "afs_employee_director_rep": {
                            "items": {
                                "required": [
                                    "afs_emp_rep_verify"
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

这没有如预期的那样进行验证:

代码语言:javascript
复制
{
    "report_body": {
        "licensees_schemes_rep_involved": {
            "report_submit_licensee": "Yes",
            "report_licensee_types": "AFS licence",
            "report_responsible_entity": "No",
            "report_cciv_corporate_dir": "No",
            "report_committed_entity": "Representative(s)",
            "representative_ReportableSituationRelate": "Employee/director of licensee or related body corporate (who is not a financial adviser)"
        },
        "other_afs_licensees": [
            "234563"
        ],
        "afs_employee_director_rep": [
            {
                "afs_emp_rep_Capacity": [
                    "Current director of licensee"
                ],
                "afs_emp_rep_work_monitored": "No",
                "afs_emp_rep_verify_1": "No"
            }
        ]
    }
}

这并不意味着:

代码语言:javascript
复制
{
    "report_body": {
        "licensees_schemes_rep_involved": {
            "report_submit_licensee": "Yes",
            "report_licensee_types": "AFS licence",
            "report_responsible_entity": "No",
            "report_cciv_corporate_dir": "No",
            "report_committed_entity": "Representative(s)",
            "representative_ReportableSituationRelate": "Employee/director of licensee or related body corporate (who is not a financial adviser)"
        },
        "other_afs_licensees": [
            "234563"
        ],
        "afs_employee_director_rep": [
            {
                "afs_emp_rep_Capacity": [
                    "Current director of licensee"
                ],
                "afs_emp_rep_work_monitored": "No",
                "afs_emp_rep_verify_1": "No"
            },
            {
                "afs_emp_rep_Capacity": [
                    "Former director of licensee"
                ],
                "afs_emp_rep_work_monitored": "No",
                "afs_emp_rep_verify_1": "No"
            }
        ]
    }
}

谢谢

EN

回答 1

Stack Overflow用户

发布于 2022-11-12 01:37:59

我会使用嵌套的oneOf重写它:每个afs_employee_director_rep条目都需要不包含“当前许可方的主管”字符串,或者,如果包含它,则还需要afs_emp_rep_verify键。

代码语言:javascript
复制
{
  "allOf":[
    {
      "properties":{
        "report_body":{
          "properties":{
            "afs_employee_director_rep":{
              "items":{
                "oneOf":[
                  {
                    "properties":{
                      "afs_emp_rep_Capacity":{
                        "contains":{
                          "const": "Current director of licensee"
                        }
                      }
                    },
                    "required":[
                      "afs_emp_rep_Capacity",
                      "afs_emp_rep_verify"
                    ]
                  },
                  {
                    "properties":{
                      "afs_emp_rep_Capacity":{
                        "not":{
                          "contains":{
                            "const":"Current director of licensee"
                          }
                        }
                      }
                    },
                    "required":[
                      "afs_emp_rep_Capacity"
                    ]
                  }
                ]
              }
            }
          }
        }
      }
    },
    {
      "properties":{
        "report_body":{
          "properties":{
            "licensees_schemes_rep_involved":{
              "properties":{
                "report_submit_licensee":{
                  "const":"Yes"
                }
              },
              "required":[
                "report_submit_licensee"
              ]
            }
          }
        }
      }
    }
  ]
}

这样,您的第二个示例将失败,而下面的修改示例(注意,它包含afs_emp_rep_verify)将被接受。

代码语言:javascript
复制
...
            {
                "afs_emp_rep_Capacity": [
                    "Current director of licensee"
                ],
                "afs_emp_rep_work_monitored": "No",
                "afs_emp_rep_verify": "No"
            },
...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74310764

复制
相关文章

相似问题

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