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 |
+-------+