Json架构属性别名

时间:2014-02-23 15:28:08

标签: json validation alias jsonschema

以下JSON Schema描述了lat / lon坐标的有效JSON:

{
    "title": "coordinates",
    "type": "object",
    "properties": {
        "longitude": {
        "type": "number",
        "minimum": -180,
            "maximum":180,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
        },
        "latitude": {
        "type": "number",
        "minimum": -180,
            "maximum":180,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
        }
    },
    "required": ["longitude", "latitude"],
    "additionalProperties":false
}

required设置将latitude属性设置为必需属性。

有没有办法为latitude键定义别名,以便客户端可以使用latitudelat - 但不能同时使用{{1}}或两者都使用?

2 个答案:

答案 0 :(得分:3)

对于“其中一个或另一个,但不是两者”,您需要oneOf

{
    "oneOf": [
        {"required": ["lat"]},
        {"required": ["latitude"]}
    ]
}

然后您需要的是对这两个属性有一个共同的定义。 :)

答案 1 :(得分:1)

您可以将属性名称设为模式(找到示例here

{
    "title": "coordinates",
    "type": "object",
    "patternProperties": {
        "/^lat(itude)?$/": {
            "type": "number",
            "minimum": -180,
            "maximum":180,
            "exclusiveMinimum": false,
            "exclusiveMaximum": false
        }
    },
    "additionalProperties":false
}

...但这打破了required属性(它似乎无法处理模式)。不是很好的答案,但也许有帮助。 :)