本文档主要对JSON函数进行了说明。
JSON_ARRAY_CONTAINS
命令格式
json_array_contains(json,value)
命令说明
判断JSON参数中是否包含value
指定的值。
返回值类型
BOOLEAN
示例
select json_array_contains('[1, 2, 3]', 2);
+-----------------------------------------+
| 1 |
JSON_ARRAY_GET
命令格式
json_array_get(json_array,index)
命令说明
根据index
取值,返回json_array
中的指定元素。
index >= 0
时,从json_array
左侧开始返回指定元素。index < 0
时,从json_array
右侧开始返回指定元素。index
指定的元素不存在时,返回结果为NULL
。
返回值类型
VARCHAR
示例
select json_array_get('["a", "b", "c"]', 1) as result;
+-----------------------------------------------+
| b |
JSON_ARRAY_LENGTH
命令格式
json_array_length(json)
命令说明
返回JSON
数组的长度。
返回值类型
BIGINT
示例
select json_array_length('[1, 2, 3]')
+-----------------------------------+
| 3 |
JSON_EXTRACT
命令格式
json_extract(json,json_path)
命令说明
从JSON
中返回json_path
指定的值,json_path
格式为$[n]
。
如果
n < 0
,系统将提示错误。如果
n
为大于0的无效参数时,返回结果为NULL
。
返回值类型
JSON
示例
select json_extract('[10, 20, [30, 40]]', '$[1]');
+------------------------------------------------+
| 20 |
JSON_EXTRACT_SCALAR
命令格式
json_extract_scalar(json,json_path)
命令说明
从JSON
中返回json_path
指定的值,json_path
格式为$[n]
。
如果
n < 0
,系统将提示错误。如果
n
为大于0的无效参数时,返回结果为NULL
。
返回值类型
VARCHAR
示例
select json_extract_scalar('[10, 20, [30, 40]]', '$[1]');
+------------------------------------------------------+
| 20 |
select json_extract_scalar('[10, 20, [30, 40]]', '$[0]');
+------------------------------------------------------+
| 10 |
JSON_ARRAY_EXTRACT/JSON_ARRAY_EXTRACT_SCALAR
命令格式
json_array_extract(json,jsonPath)
命令说明
从JSON
中返回json_path
指定的值。
返回值类型
VARCHAR(数组形式的字符串)
示例
select json_array_extract(arr1, '$.book.id') as a
from (values ('[{"book":{"id":"12"}}, {"book":{"id":"14"}}]')) t(arr1);
返回结果:["12", "14"]
select json_array_extract_scalar(arr1, '$.book.id') as a
from (values ('[{"book":{"id":"12"}}, {"book":{"id":"14"}}]')) t(arr1);
返回结果:[12, 14]
JSON_FORMAT
命令格式
json_format(json)
返回值类型
VARCHAR
示例
select json_format(JSON '[1, 2, 3]');
+-----------------------------------+
| [1,2,3] |
JSON_PARSE
命令格式
json_parse(string)
命令说明
将string
解析为JSON类型,并返回结果。
返回值类型
JSON
示例
select json_parse('[1, 2, 3]');
+----------------------------+
| [1,2,3] |
select json_parse('"a"');
+-----------------------+
| "a" |
JSON_SIZE
命令格式
json_size(json,json_path)
命令说明
返回JSON
的大小。
示例
select json_size('{"x":{"a":1, "b": 2}}', '$.x') as result;
+---------------------------------------------------------+
| 2 |
json_size('{"x": {"a": 1, "b": 2}}', '$.x.a') as result;
+------------------------------------------------------+
| 0 |
JSON_REMOVE
命令格式
json_remove(json_string,json_path_string)
json_remove(json_string,array[json_path_string])
命令说明
返回json_string
中去除json_path_string
之后的数据,可以通过array[json_path_string]
一次性指定多个json_path_string
。
返回值类型
VARCHAR(JSON格式的字符串)
示例
select json_remove(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, '$.glossary.GlossDiv') a;
返回结果:{"glossary":{"title":"example glossary"}}
select json_remove(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, array['$.glossary.title', '$.glossary.GlossDiv.title']) a;
返回结果:
{"glossary":{"GlossDiv":{"GlossList":{"GlossEntry":{"GlossTerm":"Standard Generalized Markup Language","GlossSee":"markup","SortAs":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"ID":"SGML","Acronym":"SGML","Abbrev":"ISO 8879:1986"}}}}}
JSON_RESERVE
命令格式
json_reserve(json_string,json_path_string)
json_reserve(json_string,array[json_path_string])
命令说明
返回json_string
中json_path_string
指定的数据,可以通过array[json_path_string]
一次性指定多个json_path_string
。
返回值类型
VARCHAR(JSON格式的字符串)
示例
select json_reserve(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, array['$.glossary.title']) a;
返回结果:{"glossary":{"title":"example glossary"}}
select json_reserve(
'{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}'
, array['$.glossary.title', '$.glossary.GlossDiv.title', '$.glossary.GlossDiv.GlossList.GlossEntry.ID']) a;
返回结果:
{"glossary":{"title":"example glossary","GlossDiv":{"GlossList":{"GlossEntry":{"ID":"SGML"}},"title":"S"}}}
JSON_EXTRACT_VALUR_COMPARE
命令格式
json_extract_value_compare(json, json_path, value_to_compare, operator)
命令说明
根据JSON
中提取字段值的类型进行自动类型转化后与value_to_compare
值比较。
json
:待提取值的JSON
字符串。json_path
:提取json path
表达式。value_to_compare
:需要进行比较的目标值字符串。目前仅支持字符串,如果json_path
中提取的值类型是数值型,该函数先自动将value_to_compare
中的字符串转换成数值型,再与value_to_compare
进行比较。operator:比较操作符,支持LT或<、GT或>、 LTE或<=、GTE或>=、E或=、NE或!=或<>,不区分大小写。
返回值类型
BOOLEAN
示例
select json_extract_value_compare('{"key":223}', '$.key', '9','gt');
+------------------------------------------------------------+
//223为数值型,先将'9'会转换成数值9,再与223进行比较,等价于223>9,返回值为1。
| 1 |
select json_extract_value_compare('{"key":"223"}', '$.key', '9', '>');
+------------------------------------------------------------+
//"223"为字符型,将"223"与"9"进行字符串比较,等价于"223">"9",返回值为0。
| 0 |