JSON Schema中的'$ id'属性用法

时间:2017-10-10 16:11:54

标签: json jsonschema json-schema-validator

我正在使用JSON Schema来验证数据。

我认为使用保留关键字$ id可能会在我的架构上出错。该字段的目的是指定另一个平台上属性的REMOTE ID。所以这是“原产地ID”。

你能告诉我们$ id是什么,如果我犯了一个严重错误,这个价值需要改变。因为在文档中我找到了这个定义:

  

如果存在,则此关键字的值必须是字符串,并且必须表示有效的URI引用[RFC3986]。该值应该被标准化,并且不应该是空片段<#>或空字符串<>。

2 个答案:

答案 0 :(得分:6)

$ id是保留关键字。

它用于:

  • 声明架构或子模式的标识符
  • 声明解析$ ref网址的基本网址

您可以使用$ id标识模式或模式的一部分(子模式),然后可以使用$ ref关键字在其他地方重用它。看到这个的最简单方法是,$ ref将被具有相应id的模式替换。

答案 1 :(得分:3)

由于$ id更改了架构的基本URI,因此将以不同方式解析同一架构或其任何子架构中的任何$ ref值。

例如,如果您的基本URI是“https://example.com/thing” 你有这个架构

{
    "allOf": [
        {"$ref": "foo"},
        {
            "$id": "stuff/and/nonsense",
            "allOf": {"$ref": "bar"}
        }
    ]
}

然后“$ ref”到“foo”解析为“https://example.com/foo”。但“$ ref”到“bar”解析为“https://example.com/stuff/and/bar

因此无论你将“$ id”用于其他目的,都可能会导致问题,尤其是“$ ref”解决方案。