1:解析如下json格式数据,嵌套部分:TEST1,TEST2
{
"Order": [{"TEST1":{"TEST2":{
"orderType": "LSCK",
"amount": "376.00",
"orderId": "18090501706539",
"orderCreateTime": "2018-09-05 10:21:49",
"brandID": null,
"customerCode": "01.01.0002.001",
"extendProps": "{\"purotton\":{\"khmc\":\"nutrilon官方旗舰店\",\"ecProvince\":\"江西省\",\"xfClientCode\":\"\",\"activity\":[],\"ecCity\":\"上饶市\",\"sellerMsg\":\"\",\"orderStatus\":\"已完成\",\"actualFromLoc\":\"03.01\",\"intOrderId\":\"160023\",\"ecCounty\":\"鄱阳县\",\"ecAddress\":\"江西省 上饶市 鄱阳县 昌洲乡昌洲大桥。\",\"extraAmountFlag\":\"N\",\"payMsg\":\"\",\"otherDiscountFee\":\"0.00\",\"xfTotalCashRecAmount\":\"376.00\",\"ecCustomerName\":\"程青青\",\"xfSellingAmountActual\":\"376.00\",\"xfPostDate\":\"2018-09-05 14:39:06\",\"xfSpecificedType\":\"alipay\",\"chargeNum\":\"yjr青青\",\"xfSalesman\":\"5\",\"comments\":\"0\",\"xfCreateTime\":\"2018-09-05 10:21:49\",\"outChannelFlag\":\"Y\",\"ecCustomerPhone\":\"15968140210\",\"intMemberId\":\"121406\",\"pointFlag\":\"N\",\"docActualAmount\":\"376.00\",\"lylx\":\"淘宝\",\"transactionDate\":\"2018-09-05 10:26:29\",\"xfChangeAmount\":0,\"xfSellingAmount\":\"376.00\",\"xfNetqty\":\"2\",\"docPaymentMethod\":\"3\",\"transactionType\":\"ORD\",\"codFLag\":\"N\",\"docAmount\":\"376.00\",\"createTime\":\"2018-09-05 10:21:49\",\"xfDeliveryFee\":\"0.00\",\"currencyCode\":\"RMB\"},\"receiverInfo\":{\"zip\":\"000000\",\"country\":\"中国\",\"shippingCode\":\"yunda\",\"shippingName\":\"韵达快运\",\"payTime\":\"2018-09-05 10:26:29\",\"city\":\"上饶市\",\"idCard\":\"\",\"mobile\":\"15968140210\",\"remark\":\"\",\"receiverAddress\":\"江西省 上饶市 鄱阳县 昌洲乡昌洲大桥。\",\"shippingSn\":\"3900261353988\",\"shippingFee\":\"0.00\",\"province\":\"江西省\",\"createTime\":\"2018-09-05 10:21:49\",\"district\":\"鄱阳县\",\"name\":\"程青青\",\"tel\":\"\",\"shippingTime\":\"2018-09-05 14:39:06\",\"payCode\":\"alipay\",\"payName\":\"支付宝\",\"account\":\"yjr青青\"},\"isGive\":0,\"dealCode\":\"213651422037732931\"}",
"orderCode": "18090501706539",
"remark": "",
"actualQty": "2",
"warehouseCode": "03.01",
"channelCode": "000"
}}}],
"orderLine": [{
"sizeCode": "000",
"retailPrice": "0.00"
}]
}
2:解析程序,使用包json_ext下的方法get_json(v_json json,path varchar2)获取固定path下的json
CREATE OR REPLACE PROCEDURE oms_order_gen1(p_json_varchar IN CLOB,
p_code OUT NUMBER,
p_message OUT VARCHAR2) AS
----------------------------------------------------------
--author:xy
----------------------------------------------------------
v_injson json;
v_bodylist json_list; --明细信息json列表
v_onejson json; --用于解析每一个明细数据
--要插入的记录变量
v_omsdocno VARCHAR2(80); --单据号
v_billdate NUMBER(10); --单据日期
v_doctype VARCHAR2(80); --库存类型
v_qty VARCHAR2(80); --数量
v_productalias_no VARCHAR2(80);
v_tot_amt_actual NUMBER(20, 2);
v_priceactual NUMBER(18, 4);
v_olddocno VARCHAR2(80);
v_htprice NUMBER(18, 4);
v_code VARCHAR2(80);
v_storecode VARCHAR2(80);
v_count NUMBER(10);
v_xftillid VARCHAR2(80);
v_remark VARCHAR2(80);
v_isgive VARCHAR2(80);
v_string VARCHAR2(4000);
v_exdpos json;
v_transactiondate NUMBER(10);
v_injson_orderlist json_list;
v_injson_order json;
BEGIN
--将接口信息转化为json格式
v_injson := json(p_json_varchar);
--begin modified by xy 20180906
v_injson_orderlist := json_ext.get_json_list(v_injson, 'Order');
v_injson_order := json(v_injson_orderlist.get_elem(1));
v_injson_order := json_ext.get_json(v_injson_order, 'TEST1');
v_injson_order := json_ext.get_json(v_injson_order, 'TEST2');
--获取要插入头表的字段信息
v_doctype := json_ext.get_string(v_injson_order, 'orderType');
v_olddocno := json_ext.get_string(v_injson_order, 'orderId');
v_storecode := json_ext.get_string(v_injson_order, 'warehouseCode');
v_remark := json_ext.get_string(v_injson_order, 'remark');
v_code := json_ext.get_string(v_injson_order, 'customerCode');
--begin added by xy 20180905
v_string := json_ext.get_string(v_injson_order, 'extendProps');
v_exdpos := json(v_string);
v_billdate := to_number(REPLACE(substr(json_ext.get_string(v_exdpos,
'purotton.shippingTime'),
1, 10), '-', ''));
v_omsdocno := json_ext.get_string(v_exdpos, 'purotton.dealCode');
v_isgive := json_ext.get_string(v_exdpos, 'purotton.isGive');
--retorder columns
v_transactiondate := to_number(REPLACE(substr(json_ext.get_string(v_exdpos,
'purotton.transactionDate'),
1, 10), '-', ''));
v_xftillid := json_ext.get_string(v_exdpos, 'purotton.xfTillid');
--end added by xy 20180905
raise_application_error(-20201,
'v_storecode:' || v_storecode || ', v_doctype:' ||
v_doctype);
--获取数据,插入到表oms_order中
v_bodylist := json_list();
v_onejson := json();
--获取orderLine
v_bodylist := json_ext.get_json_list(v_injson, 'orderLine');
--循环获取明细数据,并插入数据库中
FOR idx IN 1 .. v_bodylist.count LOOP
--读取每个明细信息
v_onejson := json(v_bodylist.get_elem(idx));
v_productalias_no := json_ext.get_string(v_onejson, 'itemCode');
v_qty := to_number(json_ext.get_string(v_onejson, 'actualQty'));
v_htprice := to_number(json_ext.get_string(v_onejson, 'retailPrice'));
v_priceactual := to_number(json_ext.get_string(v_onejson, 'stdprice'));
v_tot_amt_actual := to_number(json_ext.get_string(v_onejson, 'amount'));
p_code := 1;
p_message := 'success';
END LOOP;
END;
3:测试用例
declare
p_json_varchar clob := '{
"Order": [{"TEST1":{"TEST2":{
"orderType": "LSCK",
"amount": "376.00",
"orderId": "18090501706539",
"orderCreateTime": "2018-09-05 10:21:49",
"brandID": null,
"customerCode": "01.01.0002.001",
"extendProps": "{\"purotton\":{\"khmc\":\"nutrilon官方旗舰店\",\"ecProvince\":\"江西省\",\"xfClientCode\":\"\",\"activity\":[],\"ecCity\":\"上饶市\",\"sellerMsg\":\"\",\"orderStatus\":\"已完成\",\"actualFromLoc\":\"03.01\",\"intOrderId\":\"160023\",\"ecCounty\":\"鄱阳县\",\"ecAddress\":\"江西省 上饶市 鄱阳县 昌洲乡昌洲大桥。\",\"extraAmountFlag\":\"N\",\"payMsg\":\"\",\"otherDiscountFee\":\"0.00\",\"xfTotalCashRecAmount\":\"376.00\",\"ecCustomerName\":\"程青青\",\"xfSellingAmountActual\":\"376.00\",\"xfPostDate\":\"2018-09-05 14:39:06\",\"xfSpecificedType\":\"alipay\",\"chargeNum\":\"yjr青青\",\"xfSalesman\":\"5\",\"comments\":\"0\",\"xfCreateTime\":\"2018-09-05 10:21:49\",\"outChannelFlag\":\"Y\",\"ecCustomerPhone\":\"15968140210\",\"intMemberId\":\"121406\",\"pointFlag\":\"N\",\"docActualAmount\":\"376.00\",\"lylx\":\"淘宝\",\"transactionDate\":\"2018-09-05 10:26:29\",\"xfChangeAmount\":0,\"xfSellingAmount\":\"376.00\",\"xfNetqty\":\"2\",\"docPaymentMethod\":\"3\",\"transactionType\":\"ORD\",\"codFLag\":\"N\",\"docAmount\":\"376.00\",\"createTime\":\"2018-09-05 10:21:49\",\"xfDeliveryFee\":\"0.00\",\"currencyCode\":\"RMB\"},\"receiverInfo\":{\"zip\":\"000000\",\"country\":\"中国\",\"shippingCode\":\"yunda\",\"shippingName\":\"韵达快运\",\"payTime\":\"2018-09-05 10:26:29\",\"city\":\"上饶市\",\"idCard\":\"\",\"mobile\":\"15968140210\",\"remark\":\"\",\"receiverAddress\":\"江西省 上饶市 鄱阳县 昌洲乡昌洲大桥。\",\"shippingSn\":\"3900261353988\",\"shippingFee\":\"0.00\",\"province\":\"江西省\",\"createTime\":\"2018-09-05 10:21:49\",\"district\":\"鄱阳县\",\"name\":\"程青青\",\"tel\":\"\",\"shippingTime\":\"2018-09-05 14:39:06\",\"payCode\":\"alipay\",\"payName\":\"支付宝\",\"account\":\"yjr青青\"},\"isGive\":0,\"dealCode\":\"213651422037732931\"}",
"orderCode": "18090501706539",
"remark": "",
"actualQty": "2",
"warehouseCode": "03.01",
"channelCode": "000"
}}}],
"orderLine": [{
"sizeCode": "000",
"retailPrice": "0.00"
}]
}';
p_code number;
p_message varchar2(1024);
begin
oms_order_gen1(p_json_varchar,
p_code,
p_message);
end;
4:测试结果