是否可以在json模式中定义两个属性之间的约束

时间:2015-01-12 17:38:51

标签: json jsonschema json-schema-validator

我的架构中有两个字段 - 一个是名为“name”的必需属性,另一个是可选的(用于定义排序属性),名为“nameSort”,我想表达

如果定义了“nameSort”字段,则“name”字段也应定义为相同的值。

是否可以用JSON模式表达这种“元素间”约束?我在这里粗略阅读JSON Schema http://json-schema.org/latest/json-schema-validation.html说不。

2 个答案:

答案 0 :(得分:5)

旧问题,但现在可以使用constant$data(JSON指针或相对JSON指针)关键字的组合,使用json架构v5 / v6来完成此操作。

示例:

"properties": {
    "password": { "type": "string" },
    "password_confirmation": { "const": { "$data": "1/password" } }
}

"1/password"是一个相对的JSON指针,说"上升一级,然后查找密钥密码"。

答案 1 :(得分:3)

当另一个属性存在时,您可以表示一个属性必须定义,例如:

{
    "type": "object",
    "dependencies": {
        "nameSort": ["name"]
    }
}

但是,您无法指定两个属性必须具有相同的值。

另外,如果它总是相同的话,为什么你会有一个单独的财产呢?如果它总是相等的,你能否只有一个布尔标志来减少冗余?