ITPub博客

首页 > 数据库 > Oracle > oracle 解析json字符串常用脚本

oracle 解析json字符串常用脚本

原创 Oracle 作者:smilesu 时间:2019-12-17 10:36:34 0 删除 编辑

DECLARE

    l_json_str VARCHAR2(4000);

    l_json     json;

    l_year     VARCHAR2(10);

    l_month    VARCHAR2(10);

    TYPE arrays_data_rec IS RECORD(

         id   NUMBER

        ,code VARCHAR2(30)

        ,NAME VARCHAR2(100));


    TYPE arrays_data_tab IS TABLE OF arrays_data_rec INDEX BY BINARY_INTEGER;


    l_arrays_tab  arrays_data_tab;

    l_bodylist    json_list; --json列表

    l_arrays_json json; --用于解析每一个数组信息 


BEGIN

    l_arrays_tab.delete;

    l_json_str := '{ 

  "year": "2019", 

  "month":"05",

  "strArray": [{

    "id": 1,

    "code": "CODE1",

    "name": "NAME1" 

   },{

     "id": 2,

    "code": "CODE2",

    "name": "NAME2" 

   },{

     "id": 3,

    "code": "CODE3",

    "name": "NAME3" 

   }] }';

    BEGIN

        --将字符串转化为json格式

        l_json := json(l_json_str);

        --获取json的值

        l_year  := json_ext.get_string(l_json

                                      ,'year');

        l_month := json_ext.get_string(l_json

                                      ,'month');

        dbms_output.put_line('year:' || l_year || '--month:' || l_month);

        --json数组初始化

        l_arrays_json := json();

        --将strArray数组存至l_bodylist对象中

        l_bodylist := json_ext.get_json_list(l_json

                                            ,'strArray');

        IF l_bodylist IS NOT NULL THEN

            --循环数组,将值写入内存表中

            FOR idx IN 1 .. l_bodylist.count LOOP

                l_arrays_json := json(l_bodylist.get(idx));

                --注意:根据传入的值的数据类型进行对应的转换,不然会取不到值

                l_arrays_tab(idx).id := json_ext.get_number(l_arrays_json

                                                           ,'id');

                l_arrays_tab(idx).code := json_ext.get_string(l_arrays_json

                                                             ,'code');

                l_arrays_tab(idx).name := json_ext.get_string(l_arrays_json

                                                             ,'name');

                dbms_output.put_line(l_arrays_tab(idx).id || '--' || l_arrays_tab(idx).code || '--' || l_arrays_tab(idx).name);

            

            END LOOP;

        END IF;

    EXCEPTION

        WHEN OTHERS THEN

            dbms_output.put_line('JSON格式转换异常!');

    END;


EXCEPTION

    WHEN fnd_api.g_exc_error THEN

        dbms_output.put_line('error:' || SQLCODE || '--' || SQLERRM);

    WHEN fnd_api.g_exc_unexpected_error THEN

        dbms_output.put_line('Unexpected_error.' || SQLCODE || '--' || SQLERRM);

    WHEN OTHERS THEN

        dbms_output.put_line('Other error:' || SQLCODE || '--' || SQLERRM);

END;


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29961585/viewspace-2668936/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-11-30

  • 博文量
    24
  • 访问量
    40134