• JSON_KEYS :获取JSON在指定路径下的所有键值。
  • JSON_UNQUOTE :去除 json_value 的双引号并将 json_value 中的部分转义符进行转义后,返回处理结果。
  • JSON_CONTAINS :判断指定Path中是否包含 candidate 的值;若未指定Path,则判断Target中是否包含 candidate 指定的值。
  • JSON_CONTAINS_PATH :判断JSON中是否包含Path列表中的路径。
  • 返回值类型:BOOLEAN。
  • 示例:
    SELECT json_array_contains('[1, 2, 3]', 2);
    返回结果如下:
    +-------------------------------------+
    | json_array_contains('[1, 2, 3]', 2) |
    +-------------------------------------+
    |                                   1 |
    +-------------------------------------+
  • 输入值类型:字符串类型或JSON类型。
  • 返回值类型:BIGINT。
  • 示例:
    SELECT json_array_length('[1, 2, 3]');
    返回结果如下:
    +--------------------------------+
    | json_array_length('[1, 2, 3]') |
    +--------------------------------+
    |                              3 |
    +--------------------------------+
  • 输入值类型:字符串类型或JSON类型。
  • 返回值类型:JSON。
  • 示例:
    SELECT json_extract('[10, 20, [30, 40]]', '$.1');
    返回结果如下:
    +-------------------------------------------+
    | json_extract('[10, 20, [30, 40]]', '$.1') |
    +-------------------------------------------+
    | 20                                        |
    +-------------------------------------------+
  • jsonpath 指向的是JSON对象,语句如下:
    SELECT json_size('{"x":{"a":1, "b": 2}}', '$.x') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      2 |
    +--------+
  • jsonpath 指向的不是JSON对象或者JSON数组,语句如下:
    SELECT json_size('{"x": {"a": 1, "b": 2}}', '$.x.a') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      0 |
    +--------+
  • 返回 $.b 路径下的所有键,语句如下:
    SELECT json_keys(CAST('{"a": 1, "b": {"c": 30}}' AS json),'$.b');
    返回结果如下:
    +-----------------------------------------------------------+
    | json_keys(CAST('{"a": 1, "b": {"c": 30}}' AS json),'$.b') |
    +-----------------------------------------------------------+
    | ["c"]                                                     |
    +-----------------------------------------------------------+
  • 返回根路径下的所有键,语句如下:
    SELECT JSON_KEYS(json '{"a": 1, "b": {"c": 30}}');
    返回结果如下:
    +--------------------------------------------+
    | JSON_KEYS(json '{"a": 1, "b": {"c": 30}}') |
    +--------------------------------------------+
    | ["a","b"]                                  |
    +--------------------------------------------+
  • 命令说明:去除 json_value 的双引号并将其中的部分转义符进行转义后,返回处理结果。

    AnalyticDB MySQL版 不会判断 json_value 的合法性,即无论 json_value 是否符合JSON语法都会按上述逻辑进行处理。

    支持的转义符如下表。
  • 语句如下:
    SELECT json_unquote('"abc"');
    返回结果如下:
    +-----------------------+
    | json_unquote('"abc"') |
    +-----------------------+
    | abc                   |
    +-----------------------+
  • 语句如下:
    SELECT json_unquote('"\\t\\u0032"');
    返回结果如下:
    +------------------------------+
    | json_unquote('"\\t\\u0032"') |
    +------------------------------+
    |    2                         |
    +------------------------------+

    JSON_CONTAINS

    json_contains(target, candidate[, path])
    说明 AnalyticDB MySQL版 集群的内核版本需为V3.1.5.0或以上版本才支持该函数。

    如何查看集群版本,请参见 查看版本

    如需升级版本,请 提交工单 联系技术支持。

  • 若指定了 path ,则判断指定Path中是否包含 candidate 的值。包含返回1,不包含返回0。
  • 若未指定 path ,则判断Target中是否包含 candidate 指定的值。包含返回1,不包含返回0。
    规则如下:
  • target candidate 均为PRIMITIVE类型(即NUMBER,BOOLEAN,STRING,NULL),当二者相等时,视为Target包含Candidate。
  • target candidate 均为ARRAY类型的JSON,当Candidate的所有元素均包含于Target的某个元素中时,视为Target包含Candidate。
  • target 为ARRAY类型且 candidate 为非ARRAY类型,当Candidate包含于Target的某个元素中时,视为Target包含Candidate。
  • target candidate 均为OBJECT类型的JSON,当Candidate中的每个Key都包含于Target的Key中,且Candidate的Key对应的Value包含于Target中该Key对应的Value时,视为Target包含Candidate。
  • 语句如下:
    select json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '1', '$.a') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      1 |
    +--------+
  • 语句如下:
    select json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '1', '$.b') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      0 |
    +--------+
  • 语句如下:
    select json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '{"d": 4}') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      0 |
    +--------+

    JSON_CONTAINS_PATH

    json_contains_path(json, one_or_all, path[, path ...])
    说明 AnalyticDB MySQL版 集群的内核版本需为V3.1.5.0或以上版本才支持该函数。

    如何查看集群版本,请参见 查看版本

    如需升级版本,请 提交工单 联系技术支持。

  • 输入值类型: json 为JSON类型, one_or_all 为VARCHAR类型(为 'one' 或者 'all' ,不区分大小写), path 为Jsonpath。
  • 返回值类型:BOOLEAN。
  • 语句如下:
    select json_contains_path(json '{"a": 1, "b": 2, "c": {"d": 4}}', 'one', '$.a', '$.e') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      1 |
    +--------+
  • 语句如下:
    select json_contains_path(json '{"a": 1, "b": 2, "c": {"d": 4}}', 'all', '$.a', '$.e') as result;
    返回结果如下:
    +--------+
    | result |
    +--------+
    |      0 |
    +--------+
  •