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;