跳到主要内容
版本:2.5

json_length

功能

返回 JSON 字符串的长度。如果指定了 path,则返回 path 指定的值的长度。

该函数按照如下规则计算 JSON 字符串的长度:

  • 单值的长度为 1。比如1"a"truefalsenull 的长度都为 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 |
+---------------------------------------------+