• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 返回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的TINYINTSMALLINTMEDIUMINTINTBIGINT标量
        • DOUBLE:MySQL 标量DOUBLEFLOAT
        • DECIMAL:MySQL DECIMALNUMERIC标量
      • 时间类型:

        • DATETIME:MySQL DATETIMETIMESTAMP标量
        • DATE:MySQL DATE标量
        • TIME:MySQL TIME标量
      • 字符串类型:

        • STRING:MySQL的utf8字符类型标量:CHARVARCHARTEXTENUM,和SET
      • 二进制类型:

        • BLOB:MySQL二进制标量类型包括BINARYVARBINARYBLOB,和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 	|
      +---------------------	+-----------------------	+