/**
* 模块:数据获取
* 功能:解析接口返回的JSON数据
* 参数:p_jsonstr:json字符串
* 返回:返回tab_115
* 注意:
**/
FUNCTION parsejsonarray_115(p_jsonstr clob) RETURN tab_115 IS
tab tab_115 := tab_115();
rtnVal VARCHAR2(32767);
jsonkey VARCHAR2(1000);
jsonvalue VARCHAR2(32767);
temp_amount NUMBER;
temp_asset_class VARCHAR2(100);
temp_fund_str VARCHAR2(100);
temp_task_id VARCHAR2(100);
BEGIN
IF p_jsonstr IS NOT NULL THEN
FOR temprow IN (SELECT * FROM TABLE(fn_split_clob(p_jsonstr, '},'))) LOOP
if temprow.column_value is not null then
tab.extend;
temp_amount := to_number(parsejson(temprow.column_value, 'amount'),'99999999999999999.999999999999');
tab(tab.count).amount := temp_amount;
temp_asset_class := parsejson(temprow.column_value, 'itemDesc');--assetClass itemDesc
tab(tab.count).assetClass := temp_asset_class;
temp_fund_str := parsejson(temprow.column_value, 'splitName');--fundStr splitName
tab(tab.count).fundStr := temp_fund_str;
temp_task_id := parsejson(temprow.column_value, 'taskId');
tab(tab.count).taskId := temp_task_id;
end if;
END LOOP;
END IF;
RETURN tab;
END;
/**
* 模块:JSON解析
* 功能:解析json数据,不能解析包含数组的json数据,只能是简单的键值对
* 参数:p_jsonstr:json字符串
* p_key:json的key
* 返回:返回对应的key的值
* 注意:不能解析包含数组的json数据,只能是简单的键值对
**/
FUNCTION parsejson(p_jsonstr varchar2, p_key varchar2)
RETURN VARCHAR2 IS
rtnVal VARCHAR2(32767);
i NUMBER(2);
jsonkey VARCHAR2(1000);
jsonvalue VARCHAR2(32767);
json VARCHAR2(32767);
BEGIN
IF p_jsonstr IS NOT NULL THEN
json := REPLACE(p_jsonstr, '{', '');
json := REPLACE(json, '}', '');
json := REPLACE(json, '[', '');
json := REPLACE(json, ']', '');
json := REPLACE(json, '"', '');
FOR temprow IN (SELECT * FROM TABLE(fn_split(json, ','))) LOOP
IF temprow.column_value IS NOT NULL THEN
i := 0;
jsonkey := '';
jsonvalue := '';
FOR tem2 IN (SELECT * FROM TABLE(fn_split(temprow.column_value, ':'))) LOOP
IF i = 0 THEN
jsonkey := tem2.column_value;
END IF;
IF i = 1 THEN
jsonvalue := tem2.column_value;
END IF;
i := i + 1;
END LOOP;
IF (jsonkey = p_key) THEN
rtnVal := jsonvalue;
return rtnVal;
END if;
END IF;
END LOOP;
END IF;
RETURN rtnVal;
END;