暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - JSON 函数 - 返回JSON值属性的函数

林员外聊编程 2021-09-09
254
返回JSON值属性的函数
 
本部分中的函数返回 JSON 值的属性。
 
● JSON_DEPTH(json_doc)
 
返回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_LENGTH(json_doc[, path])
 
返回JSON文档的长度,如果给定了 path 参数,则返回由路径标识的文档中值的长度。如果任何参数为 NULL path 参数没有定位到文档中的值,则返回 NULL。如果 json_doc 参数不是一个有效的 JSON 文档,或者 path 参数不是有效的路径表达式,就会发生错误。在 MySQL 8.0.26 之前,如果路径表达式包含 * ** 通配符,也会引发错误。
 
文件长度的确定方法如下:
 
■ 标量的长度是 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)
 
返回 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 |
+---------------------------------------+
 
如果参数为 NULL, JSON_TYPE() 返回 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 的真和假字面量
 
○ NULL: JSON 空字面值
 
■ 数字类型:
 
○ INTEGER: MySQL TINYINTSMALLINTMEDIUMINTINT BIGINT 标量
 
○ DOUBLE: MySQL DOUBLE FLOAT 标量
 
○ DECIMAL: MySQL DECIMAL NUMERIC 标量
 
■ 时间类型:
 
○ DATETIME: MySQL DATETIME TIMESTAMP 标量
 
○ DATE: MySQL DATE 标量
 
○ TIME: MySQL TIME 标量
 
■ 字符串类型:
 
○ STRING: MySQL utf8 字符类型标量: CHAR, VARCHAR, TEXT, ENUM SET
 
■ 二进制类型:
 
○ BLOB: MySQL 二进制类型标量,包括 BINARYVARBINARYBLOBBIT
 
■ 所有其他类型:
 
○ OPAQUE(原始位)
 
● JSON_VALID(val)
 
返回01以指示一个值是否为有效的 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

文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论