Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


JSON_SCHEMA_VALIDATION_REPORT

📄字数 1.3K
👁️阅读量 加载中...

功能描述

验证json_doc文本数据是否符合预定义的json_doc_schema规范(如字段类型、必填项、取值范围等),并返回验证报告。该函数支持符合 JSON模式规范Draft 4JSON 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类型。
  • 包含两个属性 idname
  • idnumber类型,取值范围为[10, 100]。
  • namestring类型,长度范围为[2, 10]。
  • idname两个属性为必填项。
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定义的最大长度。