跳到主要内容
版本:Latest-3.4

json_length

返回 JSON 文档的长度。如果指定了路径,该函数返回路径所标识的值的长度。

提示

所有的 JSON 函数和操作符都列在导航栏和概览页面

通过生成列加速查询

文档的长度根据以下规则确定:

  • 标量值的长度为 1。例如,1"a"truefalsenull 的长度为 1。

  • 数组的长度是数组元素的数量。例如,[1, 2] 的长度为 2。

  • 对象的长度是对象成员的数量。例如,{"a": 1} 的长度为 1。

  • 嵌套数组或对象的长度不计算在内。例如,{"a": [1, 2]} 的长度为 1,因为嵌套数组 [1, 2] 不计入长度。

语法

json_length(json_doc[, path])

参数

json_doc:必需,返回其长度的 JSON 文档。

path:可选。用于返回文档中某个值的长度。路径通常以 $ 开始,并使用 . 作为路径分隔符。[] 用作数组下标,从 0 开始。

返回值

返回 INT 类型的值。

如果 JSON 文档不是有效文档,则返回错误。

在以下任一情况下返回 0:

  • path 未标识文档中的值。

  • 路径不是有效的路径表达式。

  • 路径包含 *** 通配符。

示例

示例 1:返回标量值的长度。

select json_length('1');
+------------------+
| json_length('1') |
+------------------+
| 1 |
+------------------+

示例 2:返回空对象的长度。

select json_length('{}');
+-------------------+
| json_length('{}') |
+-------------------+
| 0 |
+-------------------+

示例 3:返回有数据的对象的长度。

select json_length('{"Name": "Homer"}');
+----------------------------------+
| json_length('{"Name": "Homer"}') |
+----------------------------------+
| 1 |
+----------------------------------+

示例 4:返回 JSON 数组的长度。

select json_length('[1, 2, 3]');
+--------------------------+
| json_length('[1, 2, 3]') |
+--------------------------+
| 3 |
+--------------------------+

示例 5:返回包含嵌套数组的 JSON 数组的长度。

嵌套数组 [3, 4] 不计入长度。

select json_length('[1, 2, [3, 4]]');
+-------------------------------+
| json_length('[1, 2, [3, 4]]') |
+-------------------------------+
| 3 |
+-------------------------------+

示例 6:返回由路径 $.Person 指定的对象的长度。

SET @file = '{  
"Person": {
"Name": "Homer",
"Age": 39,
"Hobbies": ["Eating", "Sleeping"]
}
}';
select json_length(@file, '$.Person') 'Result';

示例 7:返回由路径 $.y 指定的值的长度。

select json_length('{"x": 1, "y": [1, 2]}', '$.y');
+---------------------------------------------+
| json_length('{"x": 1, "y": [1, 2]}', '$.y') |
+---------------------------------------------+
| 2 |
+---------------------------------------------+