我在 Oracle 10g 上工作,可以使用内置函数来处理 XML 文档,但不能使用 JSON 数据类型,因为据我所知,这只能从 Oracle 12c 开始。 除了安装 APEX_JSON 包之外,这里还有人有一些 plsql 或其他方法将 JSON 转换为 XML 并最终将 XML 转换为 JSON 吗?因为每当我必须将外部 JSON 文件加载到 CLOB 列中时,我都必须将其转换为 XML,以便使用 Oracle 10g 中的 XML 内置函数来管理它。
提前致谢!
马克
您可以使用 pljson 包来解析 JSON 数据。
例如,这个问题给出了如何使用 pljson 包解析 JSON 和提取值的示例。像这样:
DECLARE
obj pljson := pljson(
'{
"DASHBOARD": {
"userUid": "",
"DATA_DASHBOARD": [
{
"CLE": "TESTTEST",
"X": "",
"Y": "",
"COL": "",
"ROW": "",
"CLASSCOLOR": "",
"COLORS": ["df","df"],
"REGROUPEMENT_ID": "",
"REGROUPEMENT_TEXT": "",
"REGROUPEMENT_CLASSCOLOR": "",
"REGROUPEMENT_X": "",
"REGROUPEMENT_Y": "",
"REGROUPEMENT_COL": "",
"REGROUPEMENT_ROW": "",
"REGROUPEMENT_COLORS": ["d","df"]
}
]
}
}'
);
test varchar2(255);
arr pljson_list;
BEGIN
test := pljson_ext.get_string( obj, 'DASHBOARD.DATA_DASHBOARD[1].REGROUPEMENT_COLORS[1]');
DBMS_OUTPUT.PUT_LINE(test);
arr := pljson_ext.get_json_list( obj, 'DASHBOARD.DATA_DASHBOARD[1].REGROUPEMENT_COLORS');
arr.print;
FOR i IN 1 .. arr.COUNT LOOP
DBMS_OUTPUT.PUT_LINE( arr.get_string(i) );
END LOOP;
END;
/
(注意:对象/包具有 pl 前缀,因为 db<>fiddle 不允许创建同义词;如果您的实现创建了适当的同义词,您应该能够删除这些前缀。)
我们如何在oracle 12g中做到这一点?