微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用其他文件中的 anyOf 定义引用类型数组的 JSON 模式定义

如何解决如何使用其他文件中的 anyOf 定义引用类型数组的 JSON 模式定义

我有一个 jsonschema 定义 deFinition-1.json 如下。我有一个名为 inputsarray 类型的属性,它引用 anyOf deFinitions 之类的

"inputs": {
      "type": "array","items": {
        "anyOf": [
          {
            "$ref": "#/deFinitions/stringParameter"
          },{
            "$ref": "#/deFinitions/numberParameter"
          },{
            "$ref": "#/deFinitions/booleanParameter"
          },{
            "$ref": "#/deFinitions/jsonParameter"
          },{
            "$ref": "#/deFinitions/fileParameter"
          }
        ]
      }
    }

然后参数deFinitions在同一个jsonschema中定义如下deFinition-1.json

"deFinitions": {
    "stringParameter": {
      "type": "object","required": [
        "name","description","datatype"
      ]
   }
 ...
}

现在我想在我的其他架构 deFinitions 中引用这个参数 dummy-1.json,如下所示

  {
  "$schema": "http://json-schema.org/draft-07/schema","$id": "dummy-1.json","allOf": [
    {
      "type": "object","required": [
        "deFinition_data"
      ],"properties": {
        "deFinition_data": {
          "type": "object","required": [
            "inputs"
          ],"properties": {
            "type": "array","inputs": {
              "items": {
                "allOf": [
                  {
                    "prop1": {
                      "$ref": "#/deFinitions/stringParameter"
                    }
                  },{
                    "prop2": {
                      "$ref": "#/deFinitions/numberParameter"
                    }
                  }
                ]
              }
            }
          }
        }
      }
    },{
      "type": "object","properties": {
        "deFinition_data": {
          "$ref": "deFinition-1.json"
        }
      }
    }
  ]
}

这看起来不起作用。 prop1 也将成功验证其他参数定义的任何属性部分,即使在 dummy-1.json 中我明确引用了 #/deFinitions/stringParameter 。 我可以理解 inputs 中的 deFinition-1.json 接受 anyOf 所有参数 deFinitions。但是想知道我们如何实现 dummy-1.json 的 1:1 参数定义映射。

解决方法

如果我的理解是正确的,您想从 dummy-1.json 引用 definitions-1.json 中定义的子模式。为此,您必须指定 definition-1.json 的 URI 并在其中附加子模式的指针,例如:

dummy-1.json

{
  "$ref": "uri-of-definitions-1.json#/definitions/stringParameter"
}

请注意,要设置的 URI 非常特定于您正在使用的 json 模式库。通常绝对 https:// URL 有效,但使用起来并不总是很方便。也许相对路径也适用于您(例如 ./definition-1.json#/definitions/stringParameter

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。