Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


JSON_SCHEMA_VALID

📄字数 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_VALID( json_doc_schema, json_doc )

输入参数

  • json_doc_schema:JSON Schema 规则,JSON类型或字符类型。

  • json_doc:JSON文本,JSON类型或字符类型。

输出结果

INTEGER类型。任意参数为NULL时,输出结果为NULLjson_doc根据模式验证,通过返回1,否则返回0。

示例

以下示例中的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": "jim"
}

验证

sql
-- JSON文本满足各项校验,结果返回1。
SQL> SELECT JSON_SCHEMA_VALID('{"type": "object", "properties": { 
"id": {"type": "number", "minimum": 10, "maximum": 100}, 
"name": {"type": "string", "minLength": 2, "maxLength": 10} }, 
"required": ["id", "name"] }', '{"id": 100, "name": "jim"}');

+-------+
| EXPR1 |
+-------+
| 1     |
+-------+

-- 属性长度校验
-- JSON模式中定义了`name`属性校验规则,JSON文本该属性长度超过了校验值,结果返回0。
SQL> SELECT JSON_SCHEMA_VALID('{"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 |
+-------+
| 0     |
+-------+

-- 必要属性校验
-- JSON模式中定义了`name`是必须的成员,JSON文本缺少该属性,结果返回0。
SQL> SELECT JSON_SCHEMA_VALID('{"type": "object", "properties": { 
"id": {"type": "number", "minimum": 10, "maximum": 100}, 
"name": {"type": "string", "minLength": 2, "maxLength": 10} }, 
"required": ["id", "name"] }', '{"id": 100}');

+-------+
| EXPR1 |
+-------+
| 0     |
+-------+