再次提供一个纯粹通过pl/sql解析json的方法。

在github上面有一个叫pljson的项目,该项目就是用pl/sql 来解析json的。

项目地址:pljson(需翻|强),如果翻不了强的同学,我在国内克隆了一个副本,不定期同步更新 pljson(国内版)


 

安装方法,在release/ 标签中选择一个版本,

1.下载压缩包,

2.解压,

3.在pl/sql中命令窗口,将install.sql拖入命令窗口

4.F8执行,会顺利安装。

 

卸载方法,同上,执行uninstall.sql。


测试用例1:解析JSONObject

DECLARE
  obj  pljson;
  list pljson_list;

  l_bool BOOLEAN;
BEGIN

  obj := pljson('
    {
      "a": "中文",
      "b": 12.243,
      "c": 2e-3,
      "d": [true, false, "abdc", [1,2,3]],
      "e": [3, {"e2":3}],
      "f": {
        "f2":true
      }
    }');
  --obj.print;
  -- equivalent to print
  dbms_output.put_line(obj.to_char);
  dbms_output.put_line(pljson_ext.get_string(obj, 'a'));
  dbms_output.put_line(pljson_ext.get_double(obj, 'b'));
  dbms_output.put_line(pljson_ext.get_number(obj, 'b'));
  dbms_output.put_line(pljson_ext.get_double(obj, 'c'));
  dbms_output.put_line(pljson_ext.get_number(obj, 'c'));
  l_bool := pljson_ext.get_bool(obj, 'd[1]');
  dbms_output.put_line(sys.diutil.bool_to_int(l_bool));
  l_bool := pljson_ext.get_bool(obj, 'd[2]');
  dbms_output.put_line(sys.diutil.bool_to_int(l_bool));
  dbms_output.put_line(pljson_ext.get_string(obj, 'd[3]'));
  dbms_output.put_line(pljson_ext.get_number(obj, 'e[1]'));
  dbms_output.put_line(pljson_ext.get_number(obj, 'e[2].e2'));
  l_bool := pljson_ext.get_bool(obj, 'f.f2');
  dbms_output.put_line(sys.diutil.bool_to_int(l_bool));
END;

测试用例2:解析JSONArray

DECLARE
  json_data2 pljson;
  json_data  pljson := pljson('{   "foo": "bar",   "list": [     {"key": "value1"},     {"key": "value2"}   ] }');
  list_value pljson_list;

  l_value VARCHAR2(200);
BEGIN
  list_value := json_ext.get_json_list(json_data, 'list');

  dbms_output.put_line('Count = ' || list_value.count);

  FOR i IN 1 .. list_value.count LOOP
      
    pljson(list_value.get(i)).get('key').print;
  
    dbms_output.put_line(json_ext.get_string(pljson(list_value.get(i)),
                                               'key'));
  
    l_value := json_ext.get_string(pljson(list_value.get(i)), 'key');
    dbms_output.put_line(l_value);
  END LOOP;
END;

 

转载于:https://www.cnblogs.com/huanghongbo/p/9511870.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值