JSON_SCHEMA_VALIDATION_REPORT
📄字数 1.3K
👁️阅读量 加载中...
功能描述
验证json_doc
文本数据是否符合预定义的json_doc_schema
规范(如字段类型、必填项、取值范围等),并返回验证报告。该函数支持符合 JSON模式规范Draft 4 的JSON Schema
校验JSON文本。
JSON Schema
本身是一个 JSON 对象,包含以下核心属性,其基本结构如下:
json
{
"id": "唯一标识符(可选)",
"$schema": "http://json-schema.org/draft-04/schema#(可选)",// 固定为 Draft 4
"title": "模式标题(可选)",
"description": "描述(可选)",
"type": "根元素类型(object/array)",
"properties": { /* 字段约束 */ },
"required": [ /* 必填字段列表 */ ],
// 其他约束关键字(如 minItems、enum 等)
}
语法格式
sql
JSON_SCHEMA_VALIDATION_REPORT( json_doc_schema, json_doc )
输入参数
json_doc_schema
:JSON Schema文本,JSON类型或JSON String类型。json_doc
:JSON文本,JSON类型或JSON String类型。
输出结果
JSON类型。任意参数为NULL
时,输出结果为NULL
。
提示
返回报告基本结构如下:
valid
:验证成功为true,失败为false。失败才会有下面4个值。reason
:失败原因。schema-location
:Schema的失败位置。document-location
:JSON文本的失败位置。schema-failed-keyword
:Schema的失败的关键字。
示例
以下示例json_doc_schema
描述了JSON文本的规范
- JSON文本必须为
object
类型。 - 包含两个属性
id
与name
。 id
为number
类型,取值范围为[10, 100]。name
为string
类型,长度范围为[2, 10]。id
与name
两个属性为必填项。
json
//json_doc_schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"minimum": 10,
"maximum": 100
},
"name": {
"type": "string",
"minLength": 2,
"maxLength": 10
}
},
"required": ["id", "name"]
}
//待验证的json_doc
{
"id": 100,
"name": "Christopher"
}
验证
sql
-- 判断JSON文本是否符合JSON模式,并返回验证报告。
SQL> SELECT JSON_PRETTY(JSON_SCHEMA_VALIDATION_REPORT('{"type": "object", "properties": {
"id": {"type": "number", "minimum": 10, "maximum": 100},
"name": {"type": "string", "minLength": 2, "maxLength": 10} },
"required": ["id", "name"] }', '{"id": 100, "name": "Christopher"}'));
+-------------------------------------------------------------------------------------------------------------------------------+
| EXPR1 |
+-------------------------------------------------------------------------------------------------------------------------------+
| { +|
| "valid": false, +|
| "reason": "The JSON document location '#/name' failed requirement 'maxLength' at JSON Schema location '#/properties/name'",+|
| "schema-location": "#/properties/name", +|
| "document-location": "#/name", +|
| "schema-failed-keyword": "maxLength" +|
| } |
+-------------------------------------------------------------------------------------------------------------------------------+
-- 报告显示:校验不通过,JSON文本中 name 属性超出了Schema定义的最大长度。