Mysql 返回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空文字

    • 数值类型:

    • 时间类型:

    • 字符串类型:

    • 二进制类型:

    • 所有其他类型:

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