JSON架构IF/THEN需要嵌套对象 [英] JSON Schema if/then require nested object

查看:9
本文介绍了JSON架构IF/THEN需要嵌套对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个JSON:

{
    "i0": {
        "j0": {
            "a0": true
        }
    },
    "i1": {
        "j1": {
            "a1": "stuff"
        }
    }
}

我想要验证: 如果a0为True,则a1应为必填项。

我的架构当前为:

{
    "$schema": "http://json-schema.org/draft-07/schema",
    "id": "id",
    "type": "object",
    "required": [
        "i0",
        "i1"
    ],
    "allOf": [
        {
            "if": {
                "properties": {
                    "i0": {
                        "j0": {
                            "a0": true
                        }
                    }
                }
            },
            "then": {
                "properties": {
                    "i1": {
                        "j1": {
                            "required": [
                                "a1"
                            ]
                        }
                    }
                }
            }
        }
    ]
}

此条件似乎并未实际运行。或者,如果我尝试将required放在与我正在检查的值相同的级别上,我会看到得到一个非常类似的条件。如:

"allOf": [
    {
        "if": {
            "a0": true
        },
        "then": {
            "required": [
                "a1"
            ]
        }
    }
]
但这将要求a1a1一起位于j0之下。 如何根据j0下的值要求j1下的对象?

推荐答案

试试:

{
  "if":{
    "type":"object",
    "properties":{
      "i0":{
        "type":"object",
        "properties":{
          "j0":{
            "type":"object",
            "required":["a0"]
          }
        },
        "required":["j0"]
      }
    },
    "required":["i0"]
  },
  "then":{
    "type":"object",
    "properties":{
      "i1":{
        "type":"object",
        "properties":{
          "j1":{
            "type":"object",
            "required":["a1"]
          }
        },
        "required":["j1"]
      }
    },
    "required":["i1"]
  }
}

您必须在if/then关键字中使用整体结构,从它们具有的任何公共词根开始。在这种情况下,它们的路径在i0/i1属性处开始分叉,因此您必须从该点开始包含整个结构。

type关键字确保您有一个对象,否则当使用其他类型(如stringboolean)时,架构可能会通过验证。

required关键字确保if/then子架构仅与实际包含i0.j0.a0/i1.j1.a1属性路径的对象匹配。

此外,a0/`a1属性的required关键字仅指定它们存在。如果需要,可以向该子架构添加更多验证。

这篇关于JSON架构IF/THEN需要嵌套对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆