JSON模式中“ $ id”属性的用法

sev*_*awp 6 json jsonschema json-schema-validator

我正在使用JSON模式验证数据。

我认为使用保留关键字$ id可能会使我的模式出现错误。该字段的目的是指定另一个平台上该属性的REMOTE ID。因此,这就是“来源ID”。

您能告诉我$ id是什么吗,如果我犯了一个严重错误并且此值需要更改。因为在文档中我找到了这个定义:

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

Ped*_*dro 6

$ id是保留关键字。

它用于:

  • 声明模式或子模式的标识符
  • 声明用于解析$ ref URL的基本URL

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


小智 5

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

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

{
    "allOf": [
        {"$ref": "foo"},
        {
            "$id": "stuff/and/nonsense",
            "allOf": {"$ref": "bar"}
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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

因此,无论您出于其他目的放入“$id”中,都可能会导致问题,尤其是“$ref”分辨率。