MySQL JSON_SCHEMA_VALID() 函数使用指南

MySQL JSON_SCHEMA_VALID() 函数根据指定的 JSON 模式验证一个 JSON 文档,并返回 1 表是验证通过或者返回 0 表示验证不通过。

JSON_SCHEMA_VALID() 语法

这里是 MySQL JSON_SCHEMA_VALID() 的语法:

JSON_SCHEMA_VALID(schema, json_doc)

参数

schema
必需的。一个 JSON 模式。它必须是一个有效的 JSON 对象。
json_doc
必需的。被验证的 JSON 文档。

返回值

JSON_SCHEMA_VALID() 函数返回 101 表示 JSON 文档通过了验证, 0 表示 JSON 文档没有通过验证。

如果任何一个参数为 NULL,此函数将返回 NULL

JSON_SCHEMA_VALID() 示例

本示例展示了如何使用 JSON_SCHEMA_VALID() 函数验证一个 JSON 文档是否符合一个 JSON 模式。

首先,让我们创建一个 JSON 模式:

SET @schema = '{
      "id": "http://json-schema.org/geo",
      "$schema": "http://json-schema.org/draft-04/schema#",
      "description": "A geographical coordinate",
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        },
        "y": {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        }
      },
      "required": ["x", "y"]
    }';

这里,我们创建了 JSON 模式,其中:

  • "type": "object" 表示 JSON 文档必须是一个 JSON 对象。

  • "properties" 中定义了对象中的成员列表,以及每个成员的约束。这里的定义了两个成员:

    • x - 数字类型,最大值是 90,最小值是 -90
    • y - 数字类型,最大值是 180,最小值是 -180
  • "required": ["x", "y"] 定义了对象中必须有成员 xy

接着,让我们创建一个 JSON 文档:

SET @json_doc = '{"x": 1, "y": 2}';

然后,让我们验证 JSON 文档是否和 JSON 模式匹配:

SELECT JSON_SCHEMA_VALID(@schema, @json_doc);
+---------------------------------------+
| JSON_SCHEMA_VALID(@schema, @json_doc) |
+---------------------------------------+
|                                     1 |
+---------------------------------------+

这说明 @json_doc 是符合 @schema 定义的。

如果我们改一下 JSON 文档,去掉了对象中的成员 y:

SET @json_doc = '{"x": 1}';

让我们再次验证 JSON 文档是否和 JSON 模式匹配:

SELECT JSON_SCHEMA_VALID(@schema, @json_doc);
+---------------------------------------+
| JSON_SCHEMA_VALID(@schema, @json_doc) |
+---------------------------------------+
|                                     0 |
+---------------------------------------+

这里,因为 JSON 模式中定义了 y 是必须的成员,所以 JSON_SCHEMA_VALID() 函数返回了 0.

除此之外,您还可以将 JSON_SCHEMA_VALID() 用于 JSON 字段CHECK 约束上。