Json-schema不使用$ ref-references验证json

时间:2017-08-21 20:00:24

标签: json validation jsonschema

我有这个json:

{
  "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或{{1}}等无效引用。 我可以使用此架构验证引用吗?你可以建议我图书馆或服务吗?

2 个答案:

答案 0 :(得分:1)

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

如果是这种情况,那么目前无法用json架构表达它,所以 - 即使使用最新版本 - 你只能表示一个字符串应该是一个json指针,但是你不能限制引用对象的类型应该是什么。

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

答案 1 :(得分:1)

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

一些验证器可以轻松定义您自己的扩展关键字,这可能是您做任何事情的好方法。肯定有库将应用JSON指针,让你知道它是否指向任何东西。如果你在某个地方实施@ erosb的提案,那么如果你能对这个问题做出评论并让我们知道它是如何运作的话会很棒。