JSON 架构引用文档中的另一个元素

JSON schema reference another element in the document

有没有一种方法可以使用 JSON 架构来表达对同一 JSON 文档中另一个元素的引用?标题可能有点混乱,但我不是在寻找 "$ref" 属性,它引用了另一个 type,但我很好奇,如果有办法,使用指定字段引用文档中的另一个元素。我知道这可以强制使用 xsd 用于 xml 文档,不确定 JSON.

我想做这样的事情:

{
  "people": [
    { "id": "1", "name": "A" },
    { "id": "2", "name": "B" },
    { "id": "3", "name": "C" }
  ],
  "chosenOne": "1" // I want the schema to enforce a person ID here
}

我一直在查看 v4 的模式定义:http://json-schema.org/draft-04/schema 但没有找到任何东西,这看起来像我正在尝试做的。我错过了吗?

您想要的是在您的架构所描述的对象中描述一个引用 ($ref)。

有点像这样

{
    "people": []
    "chosenOne": { $ref: "#1"}
}

(或者如果您想要 Id 的值 (https://json-spec.readthedocs.io/pointer.html)

,则可能是一个指针

我知道没有直接的方法可以做到这一点,但您可以使用 pattern 或 oneof 属性来强制它成为正确的值。有点像这样

"properties": {
    "chosenOne"
         "type": "string",
         "oneOf": ["1","2","3"]
         ]
     },
}

同样,您可以强制 属性 的值成为参考模式。也就是说,由于没有参考值类型 (http://www.tutorialspoint.com/json/json_data_types.htm) 只有数字或字符串,您无法保证值的含义。您可以保证 if 遵循某种参考模式。

如果您需要的不仅仅是 json 模式可以为您提供的内容,您可能需要查看例如 odata。 OData 有一些额外的东西,所以你可以描述一个 entitySet,然后定义一个导航 属性 到那个集合。 但是,它确实会强制您遵循 odata 结构,因此您不像使用常规 json 架构那样自由。