根据输入json数据中的其他属性的值检查属性的值

时间:2015-03-30 13:09:35

标签: json jsonschema json-schema-validator

我接受有关数据库表架构的信息。它包含有关表列的信息。因此,显而易见,这些列具有name类型的string属性。但是,这些名称不必来自预选名称列表。它们可以是用户输入的任何内容。现在我还想接受表的唯一键,它可以是复合键,只包含用户输入的列。换句话说,唯一键可以由用户在json数据中提供的列组成。

从技术上讲,我需要的是:动态填充的字符串枚举(来自输入json数据),它将是表示唯一键的数组项的类型。因此,数组的每个元素都是列名。

例如,以下json数据

"columns": 
{
    "col1": "val1",
    "col2": "val2",
    "col3": "val3"
},
"uniquelKey": ["val1","val2"]

有效,但

"columns": 
{
    "col1": "val1",
    "col2": "val2",
    "col3": "val3"
},
"uniquelKey": ["val1","val4"]

无效,因为val4列表中不存在uniqueKey中指定的columns。 这是否可以通过当前的json-schema规范和实现来实现?我没有在这方面找到任何方向。

我当前的json架构如下所示:

...
"attributes":
{
    "type": "array",
    "items":
    {
        "type": "object",
        "properties": 
        {
            "name": {"type": "string"},
            ...
        },
        "required": ["name",...],
        ...
    }
},
"uniqueKey": 
{
    ... ** here is where I have stuck ** ...
}
...

1 个答案:

答案 0 :(得分:2)

不,使用当前版本的JSON Schema无法做到这一点。没有用于引用正在验证的数据中的值的机制。同样,无法验证属性startDateendDate startDate小于endDate的对象。

有一项建议旨在解决未来JSON架构草案正在考虑的此限制。所以,您将来可能会这样做,但现在不能。

请参阅issue 51: type enhancement: $data上的JSON Schema规范讨论。