#JSON_VALUE
JSON_VALUE函数将基于json_path所描述的路径对json_value进行检索,并返回对应的标量值。
本函数遵循如下规则:
- 本函数不支持向量化计算。
- 当expr为NULL或转换JSON类型失败时,函数返回NULL。
- 函数根据当前路径表达式查询得出的结果包含多个值时,函数返回NULL。
- 路径表达式末尾指定了json_function_step并且返回多个值时,函数返回NULL。
- 返回的value为object或array时,函数返回NULL。
expr
expr支持字符串类型、LOB、raw和json类型,在运算前会先转成json类型,若转换失败则函数返回NULL。
FORMAT JSON
用于语法兼容,无实际含义,可省略。
json_path
路径表达式,为一个常量字符串,其格式定义请参考json文档中描述。
示例(HEAP表)
SELECT JSON_VALUE('{"key4":-0.123,"key5":"test"}','$.key4') res FROM DUAL;
RES
----------------------------------------------------------------
-0.123
SELECT JSON_VALUE('{"a":{"a":{"a":1}}}', '$."a".a.a') res FROM DUAL;
RES
----------------------------------------------------------------
1
SELECT JSON_VALUE('{"a":{"a":{"a":1}}}', '$.."a".COUNT()') res FROM DUAL;
RES
----------------------------------------------------------------
3
-- 创建用于存储json数据的表table_json
CREATE TABLE IF NOT EXISTS table_json (id INT, c1 VARCHAR(300));
INSERT INTO table_json VALUES(0, '{"key1": 123, "key2": true, "key3": null, "key4": [456, false, null, {"key1": true, "key2": 789, "key3": {"key6": 123}}, [10, false, null]], "key5": {"key1": true, "key2": 789, "key3": null}}');
SELECT JSON_VALUE(c1, '$.key4.key1') res FROM table_json ORDER BY id;
RES
----------------------------------------------------------------
true
SELECT JSON_VALUE(c1, '$.key4[last]') res FROM table_json ORDER BY id;
RES
----------------------------------------------------------------
SELECT JSON_VALUE(JSON(c1), '$[0].key4[0][0][0]') res FROM table_json ORDER BY id;
RES
----------------------------------------------------------------
456