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

如何在JSON模式中使用定义(草稿-04),json,jsonschema,Json,Jsonschema,我正在使用的rest服务响应类似于下面的示例,我在这里只包含3个字段,但还有更多字段: { "results": [ { "type": "Person", "name": "Mr Bean", "dateOfBirth": "14 Dec 1981" }, { "type": "Company", "name": "Pi

我正在使用的rest服务响应类似于下面的示例,我在这里只包含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]
然而,我找不到任何文件或如何做到这一点的例子

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

任何我应该如何处理这一问题的指针/示例。

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

{
    "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" ] },
                . . . 
            }        
        }
    }
}
对不起

我不明白重点。问题是关于“dependencies”关键字的,它是上一个JSON模式规范的一部分,对吗

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

这在最后一稿中作了简要解释。 但在书中解释了属性和定义依赖关系:

从第29页开始(参见第30页的说明)


我认为您应该用继承来描述这一点:类型Person扩展MyObject,类型Company扩展MyObject,并且在主模式中定义一个包含类型MyObject的项的数组。我不知道JSONSchema与XSD有多相似,但从我对XSD的记忆来看,您的对象不需要公共超类。你宁愿在SchemaFile中继承你的遗产。例如,主模式中的一个抽象占位符,它将允许个人模式和公司模式取代它。我看到依赖项也在draf 3中。有人能解释草案3和草案4之间的依赖关系有什么不同吗?我不认为Bean先生出生于81年12月14日。如果你只知道结果数组属性的内容是“Party”的一些未知子类型,你会用什么来代替其中之一呢?相关问题发布在这里:)嗨,塞巴斯蒂安,使用依赖关系是否可以实现上述用例。[问题请按一下]()。是否可以根据另一个属性的值使字段成为必需字段。如果你能回答链接中的问题,那就太好了。谢谢,哈利。@Harry我真的需要吗?在你被“Jason”问到几分钟后,答案是完美的!(查看您的问题)@SebastianLasse,也许标题令人困惑,但请阅读
后面的原始问题文本,该文本将明确指定
,您将发现答案解决了问题要求。这个问题实际上与json模式
依赖项的使用无关。请随意改进标题。
"dependencies": {
     "shipTo":["shipAddress"],
     "loyaltyId":["loyaltyBonus"]
}