我在clob中有一个巨大的json,如
{"response":"{\"atr1\":1.0,\"atr2\":2.0,\"atr3\":3.0};"}
超过9000的属性。
我想用apex_json解析:
declare
lgk varchar2(50);
begin
apex_json.parse(i);
lgk := apex_json.get_varchar2(p_path => 'response');
dbms_output.put_line(lgk);
end;
在输出中,我可以看到类似
的内容{"atr1":1.0,"atr2":2.0,"atr3":3.0};
如果我再试一次解析,我会收到一个错误:意外字符“;”。 我如何验证json并替换像“;”这样的项目使用apex?我不想把解析clob变成varchar2并替换我需要的东西。
答案 0 :(得分:0)
首先,您的response
值(即:"{\"atr1\":1.0,\"atr2\":2.0,\"atr3\":3.0};"
)不是有效的json对象。它只是一个字符串值。删除双引号,正斜杠并验证,您将获得以下内容:
{"atr1":1.0,"atr2":2.0,"atr3":3.0};
您可以在线验证here,但由于;
因此,JSON的正确格式应如下所示:
{"response":"{"atr1":1.0,"atr2":2.0,"atr3":3.0}}
其次,您不需要解析两次,解析一次,然后根据传递的路径参数获取所需的任何值。例如,以下是修改后的代码:
declare
json_clob clob := '{"response":{"atr1":1.0,"atr2":2.0,"atr3":3.0}}';
lgk varchar2(50);
begin
apex_json.parse(json_clob);
lgk := apex_json.get_number(p_path => 'response.atr1');
dbms_output.put_line(lgk);
end;
/
--output:
--1