zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    影响stm32仿真的因素
    DMA 如何查看它有没有传输完成 传输完成再开启
    keil出错总结
    一个例子讲解wav头文件 stm32声音程序 录音和播放 wav
    前期绑定 vs 后期绑定
    抽象类 VS 接口 (3)
    抽象类 VS 接口(1)
    封装之--JAVA中的访问修饰符(区别于.NET)
    【DP专题】——洛谷P1156垃圾陷阱
    MySql
  • 原文地址:https://www.cnblogs.com/wggj/p/11534832.html
Copyright © 2011-2022 走看看