APEX_JSON.PARSE。如何处理可怕的json

时间:2017-02-25 18:03:47

标签: oracle oracle-apex

我在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并替换我需要的东西。

1 个答案:

答案 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