返回 JSON 值

Exisi 2023-01-23 22:10:25
Categories: Tags:

函数

说明

JSON_DEPTH()

JSON 文档的最大深度

JSON_LENGTH()

JSON 文档中的元素数

JSON_TYPE()

JSON 值的类型

JSON_VALID()

JSON 值是否有效

 

 

 

JSON_DEPTH(json_doc)

返回 JSON 文档的最大深度。如果参数为 , 则返回 。如果参数不是有效的 JSON 文档,则会发生错误。NULLNULL

空数组、空对象或标量值的深度为 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 参数未标识文档中的值,则返回。如果json_doc参数不是有效的 JSON 文档或路径参数不是有效的路径表达式,则会发生错误。在 MySQL 8.0.26 之前,如果路径表达式包含 或 通配符,也会引发错误。NULLNULL***
  • 文档的长度确定如下:
    • 标量的长度为 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_TYPE(json_val)

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

示例

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                                                       |

+----------------------------------------------------+

 

  • 如果参数为 NULL,则 JSON_TYPE() 返回 NULL

示例

mysql> SELECT JSON_TYPE(NULL);

+------------------------+

| JSON_TYPE(NULL) |

+------------------------+

| NULL                        |

+------------------------+

 

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

mysql>SELECTJSON_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.

 

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

 

JSON 类型:

 

  • OBJECTJSON 对象

 

  • ARRAYJSON 数组

 

  • BOOLEANJSON 真字面量和假字面量

 

  • NULLJSON 空文本

 

数值类型:

 

  • INTEGERMySQL TINYINTSMALLINTMEDIUMINTINT以及BIGINT标量

 

  • DOUBLEMySQL双浮点标量

 

  • DECIMALMySQL 十进制和数字标量

 

时间类型:

 

  • DATETIMEMySQL DATETIME TIMESTAMP 标量

 

  • DATE MySQL DATE 标量

 

  • TIME MySQL TIME Scalars

 

字符串类型:

 

  • STRINGMySQL 字符类型标量:CHARVARCHARTEXTENUM SETutf8

 

二进制类型:

 

  • BLOBMySQL二进制类型标量,包括二进制,VAR二进制,BLOBBIT

 

所有其他类型:

 

  • OPAQUE(原始位)

 

 

JSON_VALID(val)

返回 0 1 以指示值是否为有效的 JSON。如果参数为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                                      |

+---------------------------+-----------------------------+

 

 

来自 <https://dev.mysql.com/doc/refman/8.0/en/json-attribute-functions.html#function_json-length>