### 12.18.5返回JSON值属性的函数 本节中的函数返回JSON值的属性。 - [](<>) [`深度(*`json\_文件`*)`](json-attribute-functions.html#function_json-depth) [](<>) 返回JSON文档的最大深度。退换商品`无效的`如果论点是正确的`无效的`。如果参数不是有效的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_长度(*`json\_文件`*[, *`路径`*])`](json-attribute-functions.html#function_json-length) [](<>) 返回JSON文档的长度,如果*`路径`*参数,即路径标识的文档中的值的长度。退换商品`无效的`如果有任何论据`无效的`或者*`路径`*参数未标识文档中的值。如果*`json_文件`*参数不是有效的JSON文档或*`路径`*参数不是有效的路径表达式。在MySQL 8.0.26之前,如果路径表达式包含`*`或`**`通配符。 文件的长度确定如下: - 标量的长度是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_类型(*`json_val`*)`](json-attribute-functions.html#function_json-type) [](<>) 返回一个`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()`](json-attribute-functions.html#function_json-type)返回`无效的`如果论点是正确的`无效的`: ``` 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. ``` 对于一个非-`无效的`,非错误结果,下面的列表描述了可能的[`JSON_TYPE()`](json-attribute-functions.html#function_json-type)返回值: - 纯 JSON 类型: - `目的`: JSON 对象 - `大批`: JSON 数组 - `布尔值`: JSON真假文字 - `空值`: JSON 空字面量 - 数字类型: - `整数`: MySQL [`小音`](integer-types.html), [`小灵通`](integer-types.html), [`中型`](integer-types.html)和[`INT`](integer-types.html)和[`大整数`](integer-types.html)标量 - `双倍的`: MySQL [`双倍的`](floating-point-types.html) [`漂浮`](floating-point-types.html)标量 - `十进制`: MySQL [`十进制`](fixed-point-types.html)和[`数字`](fixed-point-types.html)标量 - 时间类型: - `约会时间`: MySQL [`约会时间`](datetime.html)和[`时间戳`](datetime.html)标量 - `日期`: MySQL [`日期`](datetime.html)标量 - `时间`: MySQL [`时间`](time.html)标量 - 字符串类型: - `细绳`: MySQL `utf8`字符类型标量:[`字符`](char.html), [`VARCHAR`](char.html),[`文本`](blob.html),[`枚举`](enum.html), 和[`放`](set.html) - 二进制类型: - `斑点`: MySQL 二进制类型标量,包括[`二进制`](binary-varbinary.html),[`变量`](binary-varbinary.html),[`斑点`](blob.html), 和[`少量`](bit-type.html) - 所有其他类型: - `不透明`(原始位) - [](<>) [`JSON_VALID(*`值`*)`](json-attribute-functions.html#function_json-valid) [](<>) 返回 0 或 1 以指示值是否为有效 JSON。退货`空值`如果参数是`空值`. ``` 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 | +---------------------+-----------------------+ ```