JSON_SCHEMA_VALIDATION_REPORT()¶
JSON_SCHEMA_VALIDATION_REPORT() 根据 JSON Schema(draft 4)验证 JSON 文档,并返回包含详细验证报告的 JSON 对象,其中包含合法/非法标志以及具体的错误信息。
函数说明¶
JSON_SCHEMA_VALIDATION_REPORT() 执行与 JSON_SCHEMA_VALID() 相同的验证,但返回一个结构化的 JSON 对象而非简单的布尔值。报告包含:
一个
valid字段(布尔值),指示文档是否通过验证。一个
errors数组,包含描述每个验证失败的对象,包括 schema 路径、文档路径以及一条可读的错误消息。
此函数适用于调试验证问题,或当需要对文档验证失败的具体原因进行编程访问时使用。
Syntax¶
> JSON_SCHEMA_VALIDATION_REPORT(schema, json_doc)
Arguments¶
参数 |
说明 |
|---|---|
schema |
必填。指定验证 schema 的 JSON 对象。 |
json_doc |
必填。要根据 schema 验证的 JSON 文档。 |
Examples¶
DROP DATABASE IF EXISTS dbfuncs;
CREATE DATABASE dbfuncs;
USE dbfuncs;
-- 合法的文档:报告显示 valid = true
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"object","required":["name"]}', '{"name":"test"}');
-- 缺少必填字段:报告显示详细错误
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"object","required":["name","age"]}', '{"name":"test"}');
-- 类型错误
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"object","properties":{"x":{"type":"number"}},"required":["x"]}', '{"x":"not_a_number"}');
-- 超出范围
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"number","minimum":0,"maximum":100}', '200');
-- NULL 输入
SELECT JSON_SCHEMA_VALIDATION_REPORT(NULL, '{}');
SELECT JSON_SCHEMA_VALIDATION_REPORT('{"type":"object"}', NULL);
-- 基于表的验证
CREATE TABLE t1 (j JSON);
INSERT INTO t1 VALUES ('{"a":1}'), ('{"a":"not_number"}'), ('{"b":2}');
SELECT JSON_SCHEMA_VALIDATION_REPORT(JSON_OBJECT('type', 'object', 'properties', JSON_OBJECT('a', JSON_OBJECT('type', 'number')), 'required', JSON_ARRAY('a')), j) FROM t1;
DROP TABLE t1;
DROP DATABASE dbfuncs;