本節中的函數會傳回 JSON 值的屬性。
傳回 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 文件的長度,或者,如果提供
path
引數,則傳回路徑所識別的文件內值的長度。如果任何引數為NULL
或path
引數未識別文件中的值,則傳回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 | +------------------------------------------------+
傳回一個
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 | +---------------------------------------+
如果引數為
NULL
,JSON_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
(原始位元)
返回 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 | +---------------------+-----------------------+