VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

JSONB_PATH_QUERY

功能描述

JSONB_PATH_QUERY函数利用SQL/JSON Path特性,按照特定路径查询jsonb对象,返回所有符合jsonpath的json item的集合。

语法格式

JSONB_PATH_QUERY(target jsonb, path jsonpath [, vars jsonb [, silent boolean]])

参数说明

  • target

    输入的json。

  • jsonpath

    输入的匹配用的jsonpath。

  • var

    json对象。它的属性将替换jsonpath里的名字。

    默认为空。

  • silent

    当为true时,屏蔽strict模式的jsonpath在执行过程中进行结构绑定时的报错。当查询json数据时,jsonpath也许会不符合实际json数据的结构。对一个json对象不存在的成员或json数组不存在的元素的访问会导致结构化错误。在jsonpath的lax模式下,结构化会被屏蔽且转为空 SQL/JSON 序列。在strict模式下,任何结构化报错都会抛出,除非silent被设置为 true。

    默认值:false

注意事项

无。

示例

示例1:调用JSONB_PATH_QUERY函数。

select * from jsonb_path_query('[{"name": "John", "parent": false}, {"name": "Chris", "parent": true}]', '$[*] ? (@.parent == true)') ;

返回结果为:

         jsonb_path_query
-----------------------------------
 {"name": "Chris", "parent": true}
(1 row)

示例2:JSONB_PATH_QUERY函数出现在update和insert语句中。

1、创建测试表,并插入数据。

CREATE TABLE tb_1100697(id text,id1 jsonb);
insert into tb_1100697 values( 'good ', '[{"pred": "yes", "prob": 0.6}, {"pred": "maybe", "prob": 0.4}, {"pred": "another", "prob": 0.7}]');
insert into tb_1100697 values('bad ', '[{"pred": "unexpected", "prob": 0.4}, {"pred": "uncool", "prob": 0.3}]');

2、查询表中数据。

select id from tb_1100697;

返回结果为:

  id
-------
 good
 bad
(2 rows)

3、在insert语句中调用JSONB_PATH_QUERY函数。

insert into tb_1100697(id) select * from jsonb_path_query('{"a":[1,2,3,4,5]}', '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}');

4、在update语句中调用JSONB_PATH_QUERY函数。

update tb_1100697 set id = (select * from jsonb_path_query('[4]', '2 * $[0]'));

5、查询结果。

select id from tb_1100697;

返回结果为:

 id
----
 8
 8
 8
 8
 8
(5 rows)

6、删除测试表。

drop table tb_1100697;