Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Functions That Return JSON Value Attributes

14.17.5 JSON 值属性函数

本节中的函数返回 JSON 值的属性。

  • JSON_DEPTH(json_doc)

    返回 JSON 文档的最大深度。如果参数为空,返回NULL。如果参数不是有效的 JSON 文档,出现错误。

    空数组、空对象或标量值的深度为 1。非空数组包含仅深度为 1 的元素或非空对象包含仅深度为 1 的成员值的深度为 2。否则,JSON 文档的深度大于 2。

    mysql> SELECT JSON_DEPTH('{}'), JSON_DEPTH('[]'), JSON_DEPTH('true');
    +------------------+------------------+--------------------+
    | JSON_DEPTH('{}') | JSON_DEPTH('[]') | JSON_DEPTH('true') |
    +------------------+------------------+--------------------+
    |                1 |                1 |                  1 |
    +------------------+------------------+--------------------+
    mysql> SELECT JSON_DEPTH('[10, 20]'), JSON_DEPTH('[[], {}]');
    +------------------------+------------------------+
    | JSON_DEPTH('[10, 20]') | JSON_DEPTH('[[], {}]') |
    +------------------------+------------------------+
    |                      2 |                      2 |
    +------------------------+------------------------+
    mysql> SELECT JSON_DEPTH('[10, {"a": 20}]');
    +-------------------------------+
    | JSON_DEPTH('[10, {"a": 20}]') |
    +-------------------------------+
    |                             3 |
    +-------------------------------+
  • JSON_LENGTH(json_doc[, path])

    返回 JSON 文档的长度,或者,如果提供了path参数,则返回文档中由路径标识的值的长度。如果任何参数为空或path参数不识别文档中的值,返回NULL。如果json_doc参数不是有效的 JSON 文档或path参数不是有效的路径表达式,出现错误。

    文档长度确定如下:

    • 标量值的长度为 1。

    • 数组的长度是数组元素的数量。

    • 对象的长度是对象成员的数量。

    • 长度不计入嵌套数组或对象的长度。

    mysql> SELECT JSON_LENGTH('[1, 2, {"a": 3}]');
    +---------------------------------+
    | JSON_LENGTH('[1, 2, {"a": 3}]') |
    +---------------------------------+
    |                               3 |
    +---------------------------------+
    mysql> SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}');
    +-----------------------------------------+
    | JSON_LENGTH('{"a": 1, "b": {"c": 30}}') |
    +-----------------------------------------+
    |                                       2 |
    +-----------------------------------------+
    mysql> SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b');
    +------------------------------------------------+
    | JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b') |
    +------------------------------------------------+
    |                                              1 |
    +------------------------------------------------+
  • JSON_类型(json_val)

    返回一个utf8mb4字符串,表示 JSON 值的类型。这可以是一个对象、数组或标量类型,如下所示:

    mysql> SET @j = '{"a": [10, true]}';
    mysql> SELECT JSON_TYPE(@j);
    +---------------+
    | JSON_TYPE(@j) |
    +---------------+
    | OBJECT        |
    +---------------+
    mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a'));
    +------------------------------------+
    | JSON_TYPE(JSON_EXTRACT(@j, '$.a')) |
    +------------------------------------+
    | ARRAY                              |
    +------------------------------------+
    mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a[0]'));
    +---------------------------------------+
    | JSON_TYPE(JSON_EXTRACT(@j, '$.a[0]')) |
    +---------------------------------------+
    | INTEGER                               |
    +---------------------------------------+
    mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a[1]'));
    +---------------------------------------+
    | JSON_TYPE(JSON_EXTRACT(@j, '$.a[1]')) |
    +---------------------------------------+
    | BOOLEAN                               |
    +---------------------------------------+

    JSON_类型() 如果参数为NULL,则返回NULL

    mysql> SELECT JSON_TYPE(NULL);
    +-----------------+
    | JSON_TYPE(NULL) |
    +-----------------+
    | NULL            |
    +-----------------+

    如果参数不是有效的 JSON 值,则发生错误:

    mysql> SELECT JSON_TYPE(1);
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.

    对于非NULL、非错误结果,以下列表描述了可能的JSON_类型()返回值:

    • 纯 JSON 类型:

      • OBJECT:JSON 对象

      • ARRAY:JSON 数组

      • BOOLEAN:JSON true 和 false 文本

      • NULL:JSON null 文本

    • 数字类型:

      • INTEGER: MySQL TINYINTSMALLINTMEDIUMINTINTBIGINT标量

      • DOUBLE: MySQL DOUBLEFLOAT标量

      • DECIMAL: MySQL DECIMALNUMERIC标量

    • 时间类型:

    • 字符串类型:

    • 二进制类型:

    • 所有其他类型:

      • OPAQUE(原始位)

  • JSON_VALID(val)

    返回一个值是否为有效 JSON 的 0 或 1。对 NULL 参数返回 NULL

    mysql> SELECT JSON_VALID('{"a": 1}');
    +------------------------+
    | JSON_VALID('{"a": 1}') |
    +------------------------+
    |                      1 |
    +------------------------+
    mysql> SELECT JSON_VALID('hello'), JSON_VALID('"hello"');
    +---------------------+-----------------------+
    | JSON_VALID('hello') | JSON_VALID('"hello"') |
    +---------------------+-----------------------+
    |                   0 |                     1 |
    +---------------------+-----------------------+