JSON模式中是否支持深度对象验证? [英] Is there support in JSON Schema for deep object validation?

查看:8
本文介绍了JSON模式中是否支持深度对象验证?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在查看文档,但找不到任何直接或间接的解决方案。

有没有办法在不确切知道特定对象所在的情况下对JSON对象进行验证?

例如,我想验证以下子对象:

{
  "grandParent": {
    "parent": {
      "child": {
        "name": "John"
      }
    }
  }
}

该对象可以是更大的JSON文件的一部分,结构如下:

{
  "root": {
    "someKey": {
      "grandParent": ...
    },
    "grandParent": ...,
    ...<go in even deeper>: {
      "grandParent": ...
    }
  }
} 

我是否可以创建一个json架构来验证对象,而不管它在哪里?

GLOB中的类似示例为:root.**.grandParent.parent.child

推荐答案

您需要使用additionalPropertiesitems和递归引用的组合。

首先,我们定义要验证的结构。您必须为对象的每一层定义properties

接下来,您希望您的根级别引用该定义。由于您使用的是Pre Draft2019-09,因此需要将该引用包装在allOf中。

然后,您需要确保对于对象,值应用了根架构,而对于数组,每项都应用了根架构。

"$ref": "#"的使用解析为架构的根,从而创建循环引用。

某些实现可能不喜欢这样,但大多数应该能够处理它。

以下是以下架构的实时演示:https://jsonschema.dev/s/lBrZk

{
  "$schema": "http://json-schema.org/draft-07/schema",
  "definitions": {
    "grandParentToChild": {
        "properties": {
          "grandParent": {
            "properties": {
              "parent": {
                "properties": {
                  "child": {
                    "properties": {
                      "name": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
    }
  },
  "allOf": [
    {
      "$ref": "#/definitions/grandParentToChild"
    }
  ],
  "additionalProperties": {
    "$ref": "#"
  },
  "items": {
    "$ref": "#"
  }
}

这篇关于JSON模式中是否支持深度对象验证?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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