对照输入 json 数据中其他属性的值检查属性值
Checking value of an attribute against value of other attributes in input json data
我正在接受有关数据库 table 架构的信息。它包含有关 table 列的信息。因此,很明显,这些列具有类型为 string
的 name
属性。但是,这些名称不必来自预选名称列表。它们可以是用户输入的任何内容。现在我还想接受 table 的唯一键,它可以是一个复合键,并且只包含用户输入的那些列。换句话说,唯一键可以由用户在 json 数据中提供的列组成。
因此,从技术上讲,我需要的是:动态填充的字符串枚举(来自输入 json 数据),这将是表示唯一键的数组项的类型。因此数组的每个元素都是一个列名。
例如下面的json数据
"columns":
{
"col1": "val1",
"col2": "val2",
"col3": "val3"
},
"uniquelKey": ["val1","val2"]
有效,但是
"columns":
{
"col1": "val1",
"col2": "val2",
"col3": "val3"
},
"uniquelKey": ["val1","val4"]
无效,因为 uniqueKey
中指定的 val4
不存在于 columns
列表中。
这可以通过当前的 json-schema 规范和实现来实现吗?我没有找到这方面的任何方向。
我当前的 json 架构如下所示:
...
"attributes":
{
"type": "array",
"items":
{
"type": "object",
"properties":
{
"name": {"type": "string"},
...
},
"required": ["name",...],
...
}
},
"uniqueKey":
{
... ** here is where I have stuck ** ...
}
...
不,当前版本的 JSON 架构无法做到这一点。没有用于引用正在验证的数据中的值的机制。同样,无法验证具有 startDate
和 endDate
属性且 startDate
小于 endDate
.
的对象
有一项解决此限制的提案正在考虑用于未来的 JSON 架构草案。所以,您也许可以在将来执行此操作,但不是现在。
请参阅 JSON 架构规范讨论 issue 51: type enhancement: $data
。
我正在接受有关数据库 table 架构的信息。它包含有关 table 列的信息。因此,很明显,这些列具有类型为 string
的 name
属性。但是,这些名称不必来自预选名称列表。它们可以是用户输入的任何内容。现在我还想接受 table 的唯一键,它可以是一个复合键,并且只包含用户输入的那些列。换句话说,唯一键可以由用户在 json 数据中提供的列组成。
因此,从技术上讲,我需要的是:动态填充的字符串枚举(来自输入 json 数据),这将是表示唯一键的数组项的类型。因此数组的每个元素都是一个列名。
例如下面的json数据
"columns":
{
"col1": "val1",
"col2": "val2",
"col3": "val3"
},
"uniquelKey": ["val1","val2"]
有效,但是
"columns":
{
"col1": "val1",
"col2": "val2",
"col3": "val3"
},
"uniquelKey": ["val1","val4"]
无效,因为 uniqueKey
中指定的 val4
不存在于 columns
列表中。
这可以通过当前的 json-schema 规范和实现来实现吗?我没有找到这方面的任何方向。
我当前的 json 架构如下所示:
...
"attributes":
{
"type": "array",
"items":
{
"type": "object",
"properties":
{
"name": {"type": "string"},
...
},
"required": ["name",...],
...
}
},
"uniqueKey":
{
... ** here is where I have stuck ** ...
}
...
不,当前版本的 JSON 架构无法做到这一点。没有用于引用正在验证的数据中的值的机制。同样,无法验证具有 startDate
和 endDate
属性且 startDate
小于 endDate
.
有一项解决此限制的提案正在考虑用于未来的 JSON 架构草案。所以,您也许可以在将来执行此操作,但不是现在。
请参阅 JSON 架构规范讨论 issue 51: type enhancement: $data
。