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