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_extract('{"f1":1, "f2":99, "f3":"foo"}', '$.f2');
-- postgresql的相應函數為json_extract_path或json_extract_path_text
select json_extract_path_text('{"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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM