zoukankan      html  css  js  c++  java
  • oracle数据库解析json格式

    随着非关系型数据大规模使用,以json格式产生的数据也出现在我所管理的Oracle数据库的CLOB字段里面,使用过程中就需要解析出指定键的值。

    使用了最新版本

    如果Oracle版本为12.1.0.2的,数据库直接支持SQL中解析字段中的json内容。具体使用可以参照Oracle的官方说明

    早期版本

    虽然没有原生的支持,但是可以通过安装开源的PLJSON包实现对JSON对象的操作。整个安装包可以从github下载。

    以下步骤给出如何使用PLJSON的方式从字段的JSON内容中提取指定KEY值的VALUE。

    • 创建包含json内容的表。
    create table pljson_table_test (num number not null, col clob);
    insert into pljson_table_test values(1,
    '{"data":
      {
       "name": "name 1",
       "description": "Cloud computing can support a company''s speed and agility, ...",
       "type": "link",
       "created_time": "2015-05-12T16:26:12+0000",
       "shares": { "count": 1 },
       "extra": "x1",
       "maps" : [ true ]
      }
    }');
    
    select num, name, map, count
    from pljson_table_test,
    table(
    pljson_table.json_table( --需要解析的表
    col,
    pljson_varray('data.name', 'data.extra', 'data.maps', 'data.shares.count', 'data.missing'), --指定需要的解析的KEY值
    pljson_varray('name', 'extra', 'map', 'count', 'whatelse')) --解析出来之后的字段别名
    )
    order by num
    /
    

    20180123 因回答网友问题,新增以下内容,用于处理json数组。
    code:

    declare
      list_value json_list := json_list('[{"code":"1","status":1},{"code":"2","status":0},{"code":"3","status":0},{"code":"4","status":0}]');
      code_value varchar(10);
      status_value int(2);
    begin
      dbms_output.put_line('Count = '||list_value.count);
      for i in 1 .. list_value.count
      loop
         code_value := pljson_ext.get_string(json(list_value.get(i)),'code');
         status_value := pljson_ext.get_number(json(list_value.get(i)),'status');
         dbms_output.put_line('code = ' || code_value || '; status = ' || status_value ); 
      end loop;
    end;
    /
    

    output:

    Count = 4
    code = 1; status = 1
    code = 2; status = 0
    code = 3; status = 0
    code = 4; status = 0
    

    --EOF--

  • 相关阅读:
    【转】kafka&zookeeper集群搭建指南
    spark-streaming问题集锦
    Rokid开发者社区skill之【历史上的今天】
    jQuery+Ajax获取百度百科历史上的今天
    python+xpath+requests爬取维基百科历史上的今天
    jQuery请求维基百科[历史上的今天]
    Redis和Memcached比较
    [转]RosBridge小结
    [转]使用rosbridge协议实现安卓跟ros的解耦
    跨域访问之jsonp
  • 原文地址:https://www.cnblogs.com/shenfeng/p/oracle_jason.html
Copyright © 2011-2022 走看看