postgresql 关于JSON、JSONB操作符以处理函数

PostgreSQL 操作符

->
->>

#>

#>>


说明:
1、-> 运算符用于通过 key 获取json或jsonb对象字段的值,返回值类型为json或jsonb

2、->> 运算符用于通过 key 获取json或jsonb对象字段的值,返回值类型为text

3、#>运算符用于通过指定提取key的顺序,获取指定的值,返回类型为json或jsonb

4、#>>运算符用于通过指定提取key的顺序,获取指定的值,返回值类型为text

示例说明

表名:test_t

json类型的字段名:test_json

字段值:{"a1":"b1","a2":{"c1":"d1","c2":"d2"}}

获取json或jsonb中的某个key对应的值

SELECT test_json  -> 'a1'  AS tv FROM test_t;


 

SELECT test_json  ->> 'a1' FROM test_t;

 


SELECT test_json  #> '{a2,c1}' FROM test_t;


SELECT test_json  #>> '{a2,c1}' FROM test_t;

-> 和->> 组合查询复杂的json对象

SELECT test_json  -> 'a2'->>'c2'
FROM test_t;

 PostgreSQL 提供的JSON 处理函数


json_each

json_each ( json ) setof record ( key text , value json )
jsonb_each ( jsonb ) setof record ( key text , value jsonb )
功能:key,value以记录的形式返回,value类型为json或jsonb
示例: select * from json_each ((select test_json  AS tv  from test_t ));
返回:

 json_each_text

json_each_text ( json ) setof record ( key text , value text )
jsonb_each_text ( jsonb ) setof record ( key text , value text )
功能:key,value以记录的形式返回,value类型为text
示例:select * from json_each_text ((select test_json  AS tv from test_t ));
返回:

json_extract_path  

json_extract_path ( from_json json , VARIADIC path_elems text[] ) json
jsonb_extract_path ( from_json jsonb , VARIADIC path_elems text[] ) → jsonb
功能:按照指定的key顺序,查找值,值的类型为json或jsonb。类似#>
示例:select * from json_extract_path((select test_json  AS tv from test_t),'a2', 'c1');
返回:

json_extract_path_text  

json_extract_path_text ( from_json json , VARIADIC path_elems text[] ) → text
jsonb_extract_path_text ( from_json jsonb , VARIADIC path_elems text[] ) → text

功能:按照指定的key顺序,查找值,值的类型为text。类似#>>

示例:select * from json_extract_path_text ((select test_json  AS tv from test_t),'a2', 'c1');

返回 

json_object_keys  

json_object_keys ( json ) setof text
jsonb_object_keys ( jsonb ) setof text
功能:返回json对象的key
示例:select * from json_object_keys ((select test_json  AS tv from test_t));

返回 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值