【问题标题】:Json-schema doesn't validate json with $ref-referencesJson-schema 不使用 $ref-references 验证 json
【发布时间】:2017-08-21 20:00:23
【问题描述】:

我有这个 json:

{
  "categories": [
    {
      "id": 1,
      "name": "cat1",
      "topics": [
        {
          "$ref": "#/topics/1"
        }
      ]
    }
  ],
  "topics": [
    {
      "id": 1,
      "name": "top1"
    }
  ]
}

我已经编写了下一个模式来验证它:

{
  "definitions": {
    "category": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "topics": {
            "type": "array"
            "items": { "$ref": "#/definitions/topic" }
          }
        }
      },
      "topic": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        }
      }
  },
  "type": "object",
  "properties": {
    "categories": {
      "items": { "$ref": "#/definitions/category" },
      "type": "array"
    },
    "topics": {
      "items": { "$ref": "#/definitions/topic" },
      "type": "array"
    }
  }
}

当我在流行的在线验证器上使用此架构时,它不会捕获像 #/topics/5#/ttt/555 这样的无效引用。 我可以使用此架构来验证引用吗?你能推荐我图书馆或服务吗?

【问题讨论】:

    标签: json validation jsonschema


    【解决方案1】:

    目前这超出了 JSON Schema 的范围。 @erosb 提到的提案仍在考虑中,但不是针对即将发布的 07 草案。如果有足够的需求,可以考虑将其用于 08 草案。这将是项目范围的重大扩展,这就是为什么它在其他事情得到解决的同时被搁置。

    一些验证器可以很容易地定义您自己的扩展关键字,这可能是做您想做的事的好方法。肯定有一些库会应用 JSON 指针并让您找出它是否指向任何东西。如果您在某处实施@erosb 的提议,如果您能对此问题发表评论并让我们知道结果如何,那就太好了。

    【讨论】:

      【解决方案2】:

      我不确定我是否正确理解您试图实现的目标。我假设您想指出 "topics" 数组的项目应该是 JSON 引用("$ref" 带有 JSON 指针)_并且指向的对象应该与架构 "#/definitions/topic" 匹配。

      如果是这样的话,那么目前没有办法用json模式来表达,所以——即使是最新版本——你只能表示一个字符串应该是一个json指针,但你不能做限制关于被引用对象的类型应该是什么。

      去年我 made a suggestion 解决了这个问题,但由于反馈不一,它有点卡住了。

      【讨论】:

        猜你喜欢
        • 2021-04-18
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 2019-10-18
        相关资源
        最近更新 更多