以下代碼僅作plsql解析json格式數據示例:
CREATE OR REPLACE PROCEDURE test_proc(p1 VARCHAR2) AS
v_json_varchar2 VARCHAR2(4000);
injson json;
paramlist json_list;
onejson json;
--第一層
v_marketcode VARCHAR2(8);
v_marketname VARCHAR2(64);
v_address VARCHAR2(64);
v_tel VARCHAR2(11);
--第二層
v_name VARCHAR2(64);
v_fruitcode VARCHAR2(8);
BEGIN
v_json_varchar2 := '{
"marketcode": "123456",
"marketname": "好吃的水果店",
"address": "一個好地方",
"tel": "12345678901",
"fruitlist": {
"name": "apple",
"fruitcode": "223344",
"applelist": [
{
"applename": "redapple ",
"applecode": "111000",
"price": "10"
},
{
"applename": "greenapple ",
"applecode": "111111",
"price": "12"
},
{
"applename": "yellowapple ",
"applecode": "111222",
"price": "8"
}
]
}
}';
injson := json(v_json_varchar2);
--獲取第一層json值
v_marketcode := json_ext.get_string(injson, 'marketcode');
v_marketname := json_ext.get_string(injson, 'marketname');
v_address := json_ext.get_string(injson, 'address');
v_tel := json_ext.get_string(injson, 'tel');
--第二層
v_name := json_ext.get_string(injson, 'fruitlist.name');
v_fruitcode := json_ext.get_string(injson, 'fruitlist.fruitcode');
--接下來獲取第三層,使用json_list來存放json列表
paramlist := json_list();
onejson := json();
paramlist := json_ext.get_json_list(injson, 'fruitlist.applelist');
--使用循環返回每個json部分的值
FOR i IN 1 .. paramlist.count LOOP
--讀取每個品種具體信息
onejson := json(paramlist.get_elem(i));
dbms_output.put_line(json_ext.get_string(onejson, 'applename'));
dbms_output.put_line(json_ext.get_string(onejson, 'applecode'));
dbms_output.put_line(json_ext.get_string(onejson, 'price'));
END LOOP;
END;
