Oracle, MySQL, PostgreSQL从json中获取嵌套对象值的方法

Oracle, MySQL, PostgreSQL三种数据库均可以获取json中的对象值。

如果json对象是非嵌套,则它们的用法大同小异,分别类似于:

-- oracle的相应函数为json_value
select json_value('{"f1":1, "f2":99, "f3":"foo"}', '$.f2') from dual;
-- mysql的相应函数为json_extract
select json_value('{"f1":1, "f2":99, "f3":"foo"}', '$.f2');
-- oracle的相应函数为json_extract_path或json_extract_path_text
select json_value('{"f1":1, "f2":99, "f3":"foo"}', 'f2');

结果均是99(数值)。

但如果要获取json中嵌套对象的值,则Oracle、MySQL与PostgreSQL的差别就比较大了,分别类似于:

-- oracle嵌套格式"$.path1.path2...."
select json_value('{"f1":{"f2":1},"f3":{"f4":99,"f5":"foo"}}', '$f3.f4') from dual;
-- mysql嵌套格式"$.path1.path2...."
select json_extract('{"f1":{"f2":1},"f3":{"f4":99,"f5":"foo"}}', '$f3.f4');
-- postgresql嵌套格式"path1, path2, ..."
select json_extract_path_text('{"f1":{"f2":1},"f3":{"f4":99,"f5":"foo"}}', 'f3', 'f4');

结果仍是99。

由此也看出,Oracle与MySQL很相似(毕竟现在是一家人了),而PostgreSQL则略显另类。

另外,PostgreSQL用到的json_extract_path_text函数,理论上可以用操作符“->”代替,但在有嵌套的情况下,貌似不能再使用“->”,而只能用json_extract_path_text。

转载于:https://www.cnblogs.com/wggj/p/11534832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值