12.17.5 Functions That Return JSON Value Attributes (original) (raw)

12.17.5 Functions That Return JSON Value Attributes

The functions in this section return attributes of JSON values.

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 |  
+-------------------------------+  
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 |  
+------------------------------------------------+  
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() returnsNULL if the argument isNULL:

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

An error occurs if the argument is not a valid JSON value:

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.  

For a non-NULL, non-error result, the following list describes the possibleJSON_TYPE() return values:

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 |  
+---------------------+-----------------------+