返回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
参数,则返回由路径标识的文档中值的长度。返回NULL
是否有任何自变量NULL
或自path
变量不能标识文档中的值。如果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 | +--------------------------------------- +JSON_TYPE()
返回NULL
参数是否为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正确和错误文字NULL
:JSON空文字
数值类型:
INTEGER
:MySQL的TINYINT
,SMALLINT
,MEDIUMINT
和INT
和BIGINT
标量DOUBLE
:MySQL 标量DOUBLE
FLOAT
DECIMAL
:MySQLDECIMAL
和NUMERIC
标量
时间类型:
DATETIME
:MySQLDATETIME
和TIMESTAMP
标量DATE
:MySQLDATE
标量TIME
:MySQLTIME
标量
字符串类型:
STRING
:MySQL的utf8
字符类型标量:CHAR
,VARCHAR
,TEXT
,ENUM
,和SET
二进制类型:
BLOB
:MySQL二进制标量类型包括BINARY
,VARBINARY
,BLOB
,和BIT
所有其他类型:
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 | +--------------------- +----------------------- +