json 模式是否可用于根据输入数据进行验证
Can json schema be used to validate based on input data
我只是想知道是否可以使用 json 模式根据实际输入数据本身对输入数据进行验证。
假设我有一个对象:
{
parts: {
123: {
happy: 'me'
}
},
cells: [{
part_id: 123,
some: 'other property'
}, {
part_id: 124,
some: 'thing else'
}]
}
我可以编写一个 json 模式来确保单元格对象的 part_id 实际上对应于传入的部分对象之一吗?
换句话说,part_id: 123
是可以接受的,但part_id: 124
是不行的。
谢谢!
经过一些研究,看起来 JSON Schema v5 已经通过 $data reference
属性提供了功能。
以下内容来自 javascript 模式验证器 ajv:
https://www.npmjs.com/package/ajv#data-reference
$数据参考
使用 v5 选项,您可以使用验证数据中的值作为模式关键字的值。有关其工作原理的更多信息,请参阅 v5 提案。
$data reference支持关键字:constant, enum, format, maximum/minimum, exclusiveMaximum / exclusiveMinimum, maxLength / minLength, maxItems / minItems, maxProperties / minProperties、formatMaximum / formatMinimum、formatExclusiveMaximum / formatExclusiveMinimum、multipleOf、pattern、required、uniqueItems。
“$data”的值应该是一个相对的 JSON-指针。
示例。
此架构要求 属性 较小的值小于或等于 属性 较大的值:
var schema = {
"properties": {
"smaller": {
"type": number,
"maximum": { "$data": "1/larger" }
},
"larger": { "type": number }
}
};
var validData = {
smaller: 5,
larger: 7
};
此架构要求属性与其字段名称具有相同的格式:
var schema = {
"additionalProperties": {
"type": "string",
"format": { "$data": "0#" }
}
};
var validData = {
'date-time': '1963-06-19T08:30:06.283185Z',
email: 'joe.bloggs@example.com'
}
$data 引用已安全解析 - 即使某些 属性 未定义,它也不会抛出。如果 $data 解析为 undefined 则验证成功(排除 constant 关键字)。如果 $data 解析为不正确的类型(例如,最大关键字不是 "number"),则验证失败。
我只是想知道是否可以使用 json 模式根据实际输入数据本身对输入数据进行验证。
假设我有一个对象:
{
parts: {
123: {
happy: 'me'
}
},
cells: [{
part_id: 123,
some: 'other property'
}, {
part_id: 124,
some: 'thing else'
}]
}
我可以编写一个 json 模式来确保单元格对象的 part_id 实际上对应于传入的部分对象之一吗?
换句话说,part_id: 123
是可以接受的,但part_id: 124
是不行的。
谢谢!
经过一些研究,看起来 JSON Schema v5 已经通过 $data reference
属性提供了功能。
以下内容来自 javascript 模式验证器 ajv: https://www.npmjs.com/package/ajv#data-reference
$数据参考
使用 v5 选项,您可以使用验证数据中的值作为模式关键字的值。有关其工作原理的更多信息,请参阅 v5 提案。
$data reference支持关键字:constant, enum, format, maximum/minimum, exclusiveMaximum / exclusiveMinimum, maxLength / minLength, maxItems / minItems, maxProperties / minProperties、formatMaximum / formatMinimum、formatExclusiveMaximum / formatExclusiveMinimum、multipleOf、pattern、required、uniqueItems。
“$data”的值应该是一个相对的 JSON-指针。
示例。
此架构要求 属性 较小的值小于或等于 属性 较大的值:
var schema = {
"properties": {
"smaller": {
"type": number,
"maximum": { "$data": "1/larger" }
},
"larger": { "type": number }
}
};
var validData = {
smaller: 5,
larger: 7
};
此架构要求属性与其字段名称具有相同的格式:
var schema = {
"additionalProperties": {
"type": "string",
"format": { "$data": "0#" }
}
};
var validData = {
'date-time': '1963-06-19T08:30:06.283185Z',
email: 'joe.bloggs@example.com'
}
$data 引用已安全解析 - 即使某些 属性 未定义,它也不会抛出。如果 $data 解析为 undefined 则验证成功(排除 constant 关键字)。如果 $data 解析为不正确的类型(例如,最大关键字不是 "number"),则验证失败。