12.18.5 返回JSON值属性的函数
源文档路径:MySQL :: MySQL 5.7 Reference Manual :: 12.18.5 Functions That Return JSON Value Attributes
本节中的函数返回JSON值的属性。
-
返回JSON文档的最大深度。如果参数为NULL,则返回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文档的长度,或者如果给出了*
path
参数,则返回由该路径标识的文档中的值的长度。如果任何参数为NULL或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 | +------------------------------------------------+
-
返回一个
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_TYPE()
如果参数为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_TYPE()
返回值:- 纯 JSON 类型:
OBJECT
:JSON 对象ARRAY
:JSON 数组BOOLEAN
:JSON 中的 true 和 false 字面量NULL
:JSON 中的 null 字面量
- 数字类型:
- 时间类型:
- 字符串类型:
- 二进制类型:
- 所有其他类型:
OPAQUE
(原始位)
- 纯 JSON 类型:
-
返回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 | +---------------------+-----------------------+