JSON模式引用文档

时间:2016-01-24 18:08:38

标签: json jsonschema

有没有办法使用JSON模式表达对同一JSON文档中的另一个元素的引用?标题可能有点令人困惑,但我没有找到引用另一个类型"$ref"属性,但我很好奇,如果有办法的话,使用指定的字段引用文档中的另一个元素。我知道这可以强制使用xsd for 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但是没有找到任何东西,看起来就像我想要做的那样。我错过了吗?

1 个答案:

答案 0 :(得分:3)

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

有点像这样

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

(如果你想要Id(http://json-spec.readthedocs.org/en/latest/pointer.html

的值,也可以是指针

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

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

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

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