21

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

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

我想为上面(draft-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]

但是,我找不到任何文档或如何执行此操作的示例。

目前我的 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" }
                }
            }
        }
    }
}

我应该如何处理的任何指针/示例。

4

2 回答 2

34

我认为推荐的方法是Json-Schema web, Example2中显示的方法。您需要使用枚举“按值”选择模式。在您的情况下,它将类似于:

{
    "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" ] },
                . . . 
            }        
        }
    }
}
于 2013-08-22T15:01:52.900 回答
10

对不起,

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

我在接受的答案中没有找到“依赖项”(?)

在最后的草稿中对其进行了简要说明。但是http://usingjsonschema.com在书中解释了属性和定义依赖:

http://usingjsonschema.com/assets/UsingJsonSchema_20140814.pdf

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

"dependencies": {
     "shipTo":["shipAddress"],
     "loyaltyId":["loyaltyBonus"]
}
于 2014-12-20T00:04:59.837 回答