MariaDB JSON_LENGTH() 函数使用指南

在 MariaDB 中,JSON_LENGTH() 是一个内置函数,它返回 JSON 文档或者 JSON 文档中通过路径指定的节点的长度。

MariaDB JSON_LENGTH() 语法

这里是 MariaDB JSON_LENGTH() 的语法:

JSON_LENGTH(json)
JSON_LENGTH(json, path)

参数

json
必需的。一个 JSON 文档。
path
可选的。一个路径表达式。

如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_LENGTH'

返回值

如果指定了 path, MariaDB JSON_LENGTH() 函数返回 JSON 文档中由路径指定的值的长度,否则返回 JSON 文档的长度。此函数按照如下规则计算 JSON 文档的长度:

  • 标量的长度是 1。比如, 1, '"x"', true, false, null 的长度都是 1。
  • 数组的长度是数组元素的数量。 比如, [1, 2] 的长度是 2。
  • 对象的长度是对象成员的数量。 比如, {"x": 1} 的长度是 1。
  • 内嵌的数组或对象不参与计算长度。 比如, {"x": [1, 2]} 的长度是 1。

如果存在以下的情况, JSON_LENGTH() 函数将返回 NULL

  • 如果 JSON 文档中不存在指定的路径。
  • 如果任意一个参数为 NULL

MariaDB 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 |
+-----------------------------------------------------------+

不存在的路径

如果您传递路径在 JSON 文档中不存在,MariaDB JSON_LENGTH() 函数将返回 NULL

SELECT JSON_LENGTH('{"x": 1, "y": [1, 2]}', '$.z');

输出:

+---------------------------------------------+
| JSON_LENGTH('{"x": 1, "y": [1, 2]}', '$.z') |
+---------------------------------------------+
|                                        NULL |
+---------------------------------------------+

结论

在 MariaDB 中,JSON_LENGTH() 是一个内置函数,它返回 JSON 文档或者 JSON 文档中通过路径指定的节点的长度。