json_length
功能
返回 JSON 字符串的长度。如果指定了 path
,则返回 path
指定的值的长度。
该函数按照如下规则计算 JSON 字符串的长度:
-
单值的长度为 1。比如
1
,"a"
,true
,false
,null
的长度都为 1。 -
数组 (array) 的长度为数组内元素的数量。 比如
[1, 2]
的长度为 2。 -
对象 (object) 的长度为对象内成员 (key) 的数量。 比如
{"a": 1}
的长度为 1。 -
内嵌的数组或对象不参与长度计算。 比如
{"a": [1, 2]}
的长度为 1,因为会计算外层 JSON 对象的长度,不计算内嵌数组[1, 2]
的长度。
语法
json_length(json_doc[, path])
参数说明
-
json_doc
: JSON 字符串,必选。 -
path
:路径表达式,可选。取值类型为 VARCHAR。path
一般以$
符号作为开头; 使用.
作为路径分隔符;使用[]
表示数组下标,从 0 开始。
返回值说明
返回 INT 类型的值。
如果json_doc
指定的 JSON 字符串为无效字符串,则返回报错。
存在如下情况,返回 0:
- JSON 字符串中不存在
path
指定的路径。 path
指定的路径不是有效的路径表达式。path
中包含*
或**
通配符。
示例
示例一: 返回单值的长度。
select json_length('1');
+------------------+
| json_length('1') |
+------------------+
| 1 |
+------------------+
示例二: 返回空对象的长度。
select json_length('{}');
+-------------------+
| json_length('{}') |
+-------------------+
| 0 |
+-------------------+
示例三: 返回 JSON 对象长度。
select json_length('{"Name": "Alice"}');
+----------------------------------+
| json_length('{"Name": "Alice"}') |
+----------------------------------+
| 1 |
+----------------------------------+
示例四: 返回 JSON 数组的长度。
select json_length('[1, 2, 3]');
+--------------------------+
| json_length('[1, 2, 3]') |
+--------------------------+
| 3 |
+--------------------------+
示例五: 数组元素内嵌了数组 [3, 4],内嵌的数组不计入长度,所以长度仍为 3。
select json_length('[1, 2, [3, 4]]');
+-------------------------------+
| json_length('[1, 2, [3, 4]]') |
+-------------------------------+
| 3 |
+-------------------------------+
示例六: 返回 JSON 字符串中路径表达式指定值的长度。
SET @file = '{
"Employee": {
"Name": "Alice",
"Age": 32,
"Hobbies": ["Dancing", "Shopping"]
}
}';
select json_length(@file, '$.Employee');
+----------------------------------+
| json_length(@file, '$.Employee') |
+----------------------------------+
| 3 |
+----------------------------------+
示例七:返回路径表达式指定的值的长度。
select json_length('{"x": 1, "y": [1, 2]}', '$.y');
+---------------------------------------------+
| json_length('{"x": 1, "y": [1, 2]}', '$.y') |
+---------------------------------------------+
| 2 |
+---------------------------------------------+