本节中的函数返回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
是否有任何自变量NULL
或自path
变量不能标识文档中的值。如果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正确和错误文字NULL
:JSON空文字
-
数值类型:
-
时间类型:
-
字符串类型:
-
二进制类型:
-
所有其他类型:
OPAQUE
(原始位)
-
-
返回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 |
+---------------------+-----------------------+