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

kel*_*yfj 4 json jsonschema json-schema-validator

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

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

是否可以用JSON模式表达这样的“元素间”约束?我在http://json-schema.org/latest/json-schema-validation.html上对JSON Schema的粗读显示拒绝。

And*_*rew 7

这是个老问题,但是现在可以通过结合使用constant$data(JSON指针或相对JSON指针)关键字在json模式v5 / v6中完成。

例:

"properties": {
    "password": { "type": "string" },
    "password_confirmation": { "const": { "$data": "1/password" } }
}
Run Code Online (Sandbox Code Playgroud)

"1/password"相对的JSON指针在哪里说“向上一级,然后查找密钥密码”。

  • 从 07 草案开始,JSON 架构_不_支持`$data`,尽管像 AJV 这样的验证器支持。有关详细信息,请参阅 https://github.com/json-schema-org/json-schema-spec/issues/51。 (3认同)
  • 如上所述,这是一个非标准关键字,在实现之间不能互操作。 (2认同)

clo*_*eet 5

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

{
    "type": "object",
    "dependencies": {
        "nameSort": ["name"]
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,您不能指定两个属性必须具有相等的值。

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

  • 比较值相等的一个用例是“password”和“password-repeat”对。那么,这可能吗? (2认同)