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。