跳到主要内容

JSON_LENGTH

描述

JSON_LENGTH 函数用于返回给定 JSON 文档的长度或元素个数。如果 JSON 文档是一个数组,则返回数组中元素的个数;如果 JSON 文档是一个对象,则返回对象中键值对的个数。如果 JSON 文档为 NULL 或无效,返回 NULL

语法

JSON_LENGTH(<json_object> [, <path>])

参数

必选参数

  • <json_object> JSON 类型,要返回其长度的 JSON 文档。

可选参数

  • <path> String 类型,用于返回文档中某个对象的长度。

注意事项

该函数根据以下规则计算 JSON 文档的长度:

  • 标量的长度为 1。例如:'1', '"x"', 'true', 'false', 'null' 的长度均为 1。
  • 数组的长度是数组元素的数量。例如:'[1, 2]' 的长度为 2。
  • 对象的长度是对象成员的数量。例如:'{"x": 1, "y": [1, 2, 3]}' 的长度为 2。

返回值

  • 对于 JSON 数组,返回数组中元素的个数。
  • 对于 JSON 对象,返回对象中键值对的个数。
  • 对于 JSON 标量类型(如字符串、数字、布尔值、null 等),返回 1。
  • 对于无效的 JSON 字符串,返回 NULL。

示例

  1. 示例 1
    SELECT json_length('{"k1":"v31","k2":300}');
    +--------------------------------------+
    | json_length('{"k1":"v31","k2":300}') |
    +--------------------------------------+
    | 2 |
    +--------------------------------------+
    SELECT json_length('[1, 2, 3, 4, 5, 6]');
    +-----------------------------------+
    | json_length('[1, 2, 3, 4, 5, 6]') |
    +-----------------------------------+
    | 6 |
    +-----------------------------------+
  2. 标量类型的长度
    SELECT json_length('"abc"');
    +----------------------+
    | json_length('"abc"') |
    +----------------------+
    | 1 |
    +----------------------+
    SELECT json_length('123');
    +--------------------+
    | json_length('123') |
    +--------------------+
    | 1 |
    +--------------------+
    SELECT json_length('{"k": null}');
    +----------------------------+
    | json_length('{"k": null}') |
    +----------------------------+
    | 1 |
    +----------------------------+
  3. 指定 path
    SELECT json_length('{"x": 1, "y": [1, 2]}', '$.y');
    +---------------------------------------------+
    | json_length('{"x": 1, "y": [1, 2]}', '$.y') |
    +---------------------------------------------+
    | 2 |
    +---------------------------------------------+
  4. NULL 参数
    SELECT json_length('{"x": 1, "y": [1, 2]}', NULL);
    +--------------------------------------------+
    | json_length('{"x": 1, "y": [1, 2]}', NULL) |
    +--------------------------------------------+
    | NULL |
    +--------------------------------------------+
    SELECT json_length(NULL, '$.y');
    +--------------------------+
    | json_length(NULL, '$.y') |
    +--------------------------+
    | NULL |
    +--------------------------+