JSON_SCHEMA_VALID
📄字数 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_VALID( json_doc_schema, json_doc )输入参数
json_doc_schema:JSON Schema 规则,JSON类型或字符类型。json_doc:JSON文本,JSON类型或字符类型。
输出结果
INTEGER类型。任意参数为NULL时,输出结果为NULL。json_doc根据模式验证,通过返回1,否则返回0。
示例
以下示例中的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": "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 |
+-------+