返回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 标量DOUBLEFLOATDECIMAL: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 | +--------------------- +----------------------- +
