文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  傳回 JSON 值屬性的函數

14.17.5 傳回 JSON 值屬性的函數

本節中的函數會傳回 JSON 值的屬性。

  • JSON_DEPTH(json_doc)

    傳回 JSON 文件中的最大深度。如果引數為 NULL,則傳回 NULL。如果引數不是有效的 JSON 文件,則會發生錯誤。

    空陣列、空物件或純量值具有深度 1。僅包含深度 1 元素的非空陣列或僅包含深度 1 成員值的非空物件具有深度 2。否則,JSON 文件會具有大於 2 的深度。

    mysql> SELECT JSON_DEPTH('{}'), JSON_DEPTH('[]'), JSON_DEPTH('true');
    +------------------+------------------+--------------------+
    | JSON_DEPTH('{}') | JSON_DEPTH('[]') | JSON_DEPTH('true') |
    +------------------+------------------+--------------------+
    |                1 |                1 |                  1 |
    +------------------+------------------+--------------------+
    mysql> SELECT JSON_DEPTH('[10, 20]'), JSON_DEPTH('[[], {}]');
    +------------------------+------------------------+
    | JSON_DEPTH('[10, 20]') | JSON_DEPTH('[[], {}]') |
    +------------------------+------------------------+
    |                      2 |                      2 |
    +------------------------+------------------------+
    mysql> SELECT JSON_DEPTH('[10, {"a": 20}]');
    +-------------------------------+
    | JSON_DEPTH('[10, {"a": 20}]') |
    +-------------------------------+
    |                             3 |
    +-------------------------------+
  • JSON_LENGTH(json_doc[, path])

    傳回 JSON 文件的長度,或者,如果提供 path 引數,則傳回路徑所識別的文件內值的長度。如果任何引數為 NULLpath 引數未識別文件中的值,則傳回 NULL。如果 json_doc 引數不是有效的 JSON 文件或 path 引數不是有效的路徑運算式,則會發生錯誤。

    文件的長度判斷如下

    • 純量的長度為 1。

    • 陣列的長度是陣列元素的數量。

    • 物件的長度是物件成員的數量。

    • 長度不會計算巢狀陣列或物件的長度。

    mysql> SELECT JSON_LENGTH('[1, 2, {"a": 3}]');
    +---------------------------------+
    | JSON_LENGTH('[1, 2, {"a": 3}]') |
    +---------------------------------+
    |                               3 |
    +---------------------------------+
    mysql> SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}');
    +-----------------------------------------+
    | JSON_LENGTH('{"a": 1, "b": {"c": 30}}') |
    +-----------------------------------------+
    |                                       2 |
    +-----------------------------------------+
    mysql> SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b');
    +------------------------------------------------+
    | JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b') |
    +------------------------------------------------+
    |                                              1 |
    +------------------------------------------------+
  • JSON_TYPE(json_val)

    傳回一個 utf8mb4 字串,指示 JSON 值的類型。這可以是物件、陣列或純量類型,如下所示

    mysql> SET @j = '{"a": [10, true]}';
    mysql> SELECT JSON_TYPE(@j);
    +---------------+
    | JSON_TYPE(@j) |
    +---------------+
    | OBJECT        |
    +---------------+
    mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a'));
    +------------------------------------+
    | JSON_TYPE(JSON_EXTRACT(@j, '$.a')) |
    +------------------------------------+
    | ARRAY                              |
    +------------------------------------+
    mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a[0]'));
    +---------------------------------------+
    | JSON_TYPE(JSON_EXTRACT(@j, '$.a[0]')) |
    +---------------------------------------+
    | INTEGER                               |
    +---------------------------------------+
    mysql> SELECT JSON_TYPE(JSON_EXTRACT(@j, '$.a[1]'));
    +---------------------------------------+
    | JSON_TYPE(JSON_EXTRACT(@j, '$.a[1]')) |
    +---------------------------------------+
    | BOOLEAN                               |
    +---------------------------------------+

    如果引數為 NULLJSON_TYPE() 會傳回 NULL

    mysql> SELECT JSON_TYPE(NULL);
    +-----------------+
    | JSON_TYPE(NULL) |
    +-----------------+
    | NULL            |
    +-----------------+

    如果引數不是有效的 JSON 值,則會發生錯誤

    mysql> SELECT JSON_TYPE(1);
    ERROR 3146 (22032): Invalid data type for JSON data in argument 1
    to function json_type; a JSON string or JSON type is required.

    對於非 NULL、非錯誤結果,以下清單描述可能的 JSON_TYPE() 傳回值

    • 純粹 JSON 類型

      • OBJECT:JSON 物件

      • ARRAY:JSON 陣列

      • BOOLEAN:JSON true 和 false 字面值

      • NULL:JSON null 字面值

    • 數值類型

    • 時間類型

    • 字串類型

    • 二進位類型

    • 所有其他類型

      • OPAQUE (原始位元)

  • JSON_VALID(val)

    返回 0 或 1 以指示值是否為有效的 JSON。如果參數為 NULL,則返回 NULL

    mysql> SELECT JSON_VALID('{"a": 1}');
    +------------------------+
    | JSON_VALID('{"a": 1}') |
    +------------------------+
    |                      1 |
    +------------------------+
    mysql> SELECT JSON_VALID('hello'), JSON_VALID('"hello"');
    +---------------------+-----------------------+
    | JSON_VALID('hello') | JSON_VALID('"hello"') |
    +---------------------+-----------------------+
    |                   0 |                     1 |
    +---------------------+-----------------------+