如何在JSON模式中使用定义(draft-04)

我正在使用的其他服务响应类似于下面的示例,我只在这里包括3个字段,但还有更多:

{ "results": [ { "type": "Person", "name": "Mr Bean", "dateOfBirth": "14 Dec 1981" }, { "type": "Company", "name": "Pi", "tradingName": "Pi Engineering Limited" } ] } 

我想为上面的(草稿-04)写一个JSON模式文件,它将明确指定:

 if type == Person then list of required properties is ["type", "name", "dateOfBirth", etc] OR if type == "Company" then list of required properties is ["type", "name", "tradingName", etc] 

但是,我无法find任何文件或例如如何做到这一点。

目前我的JSON模式如下所示:

 { "$schema": "http://json-schema.org/draft-04/schema", "type": "object", "required": ["results" ], "properties": { "results": { "type": "array", "items": { "type": "object", "required": ["type", "name"], "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "dateOfBirth": { "type": "string" }, "tradingName": { "type": "string" } } } } } } 

任何指针/我应该如何处理这个例子。

我认为推荐的方法是在Json-Schema web中示例的示例2。 您需要使用枚举来“按值”select模式。 在你的情况下,会是这样的:

 { "type": "object", "required": [ "results" ], "properties": { "results": { "type": "array", "items": { "oneOf": [ { "$ref": "#/definitions/person" }, { "$ref": "#/definitions/company" } ] } } }, "definitions": { "person": { "properties": { "type": { "enum": [ "person" ] }, "name": {"type": "string" }, "dateOfBirth": {"type":"string"} }, "required": [ "type", "name", "dateOfBirth" ], "additionalProperties": false }, "company": { "properties": { "type": { "enum": [ "company" ] }, . . . } } } } 

抱歉,

我不明白这一点。 问题是关于“依赖关系”关键字是最后一个JSON模式规范的一部分,对吗?

我在接受的答案中找不到“依赖关系”(?)

在最后一稿中简要解释。 但是http://usingjsonschema.com在本书中解释了属性和定义的依赖关系:;

assets/UsingJsonSchema_20140814.pdf

从第29页开始(参见第30页解释)

 "dependencies": { "shipTo":["shipAddress"], "loyaltyId":["loyaltyBonus"] }