MySQL JSON_LENGTH() 函数使用指南
MySQL JSON_LENGTH()
函数返回 JSON 文档或者 JSON 文档中通过路径指定的节点的长度。
JSON_LENGTH()
语法
这里是 MySQL JSON_LENGTH()
的语法:
JSON_LENGTH(json)
JSON_LENGTH(json, path)
参数
json
- 必需的。一个 JSON 文档。
path
- 可选的。一个路径表达式。
返回值
如果指定了 path
, JSON_LENGTH()
函数返回 JSON 文档中由路径指定的值的长度,否则返回 JSON 文档的长度。JSON_LENGTH()
函数按照如下规则计算 JSON 文档的长度:
- 纯值的长度是 1。比如,
1
,'"x"'
,true
,false
,null
的长度都是 1。 - 数组的长度是数组元素的数量。 比如,
[1, 2]
的长度是 2。 - 对象的长度是对象成员的数量。 比如,
{"x": 1}
的长度是 1。 - 内嵌的数组或对象不参与计算长度。 比如,
{"x": [1, 2]}
的长度是 1。
如果存在以下的情况, JSON_LENGTH()
函数将返回 NULL
:
- 如果 JSON 文档中不存在指定的路径。
- 如果任意一个参数为
NULL
。
JSON_LENGTH()
函数将在以下情况下返回错误:
- 如果参数
json
不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用JSON_VALID()
验证 JSON 文档的有效性。 - 如果参数
path
不是有效的路径表达式, MySQL 将会给出错误。 - 在 MySQL 8.0.26 之前,如果参数
path
中包含*
或**
, MySQL 将会给出错误。
JSON_LENGTH()
示例
这里列出了几个常见的 JSON_LENGTH()
用法示例。
示例: 值的长度
SELECT
JSON_LENGTH('1') as `1`,
JSON_LENGTH('true') as `true`,
JSON_LENGTH('false') as `false`,
JSON_LENGTH('null') as `null`,
JSON_LENGTH('"abc"') as `"abc"`;
+------+------+-------+------+-------+
| 1 | true | false | null | "abc" |
+------+------+-------+------+-------+
| 1 | 1 | 1 | 1 | 1 |
+------+------+-------+------+-------+
示例: 数组的长度
SELECT
JSON_LENGTH('[]') as `[]`,
JSON_LENGTH('[1, 2]') as `[1, 2]`,
JSON_LENGTH('[1, {"x": 2}]') as `[1, {"x": 2}]`;
+------+--------+---------------+
| [] | [1, 2] | [1, {"x": 2}] |
+------+--------+---------------+
| 0 | 2 | 2 |
+------+--------+---------------+
示例: 对象的长度
SELECT
JSON_LENGTH('{}') as `[]`,
JSON_LENGTH('{"x": 1, "y": 2}') as `{"x": 1, "y": 2}`,
JSON_LENGTH('{"x": 1, "y": {"z" : 2}}') as `{"x": 1, "y": {"z" : 2}}`;
+------+------------------+--------------------------+
| [] | {"x": 1, "y": 2} | {"x": 1, "y": {"z" : 2}} |
+------+------------------+--------------------------+
| 0 | 2 | 2 |
+------+------------------+--------------------------+
示例: 路径
您可以获取 JSON 文档中通过路径表达式指定的节点值的长度。
SELECT JSON_LENGTH('{"x": 1, "y": [1, 2]}', '$.y');
+---------------------------------------------+
| JSON_LENGTH('{"x": 1, "y": [1, 2]}', '$.y') |
+---------------------------------------------+
| 2 |
+---------------------------------------------+
这里, 路径表达式 $.y
对应的值是 [1, 2]
,[1, 2]
的长度为 2。这相当先使用 JSON_EXTRACT()
函数提取路径匹配的部分,再计算长度,如下:
SELECT JSON_LENGTH(JSON_EXTRACT('{"x": 1, "y": [1, 2]}', '$.y'));
+-----------------------------------------------------------+
| JSON_LENGTH(JSON_EXTRACT('{"x": 1, "y": [1, 2]}', '$.y')) |
+-----------------------------------------------------------+
| 2 |
+-----------------------------------------------------------+