在JSON for Oracle中转义&符号

时间:2015-03-25 14:05:49

标签: json oracle escaping

我们将JSON发送到oracle函数,有时它包含&符号。我想知道是否还有其他方法可以阻止"变量替换"问题是因为&符号而不必将字符串修改为

'{"this is the JSON &'||' it contains an ampersand"}'

我已经尝试过这些并且它们不起作用。

'{"this is the JSON && it contains an ampersand"}'

'{"this is the JSON /& it contains an ampersand"}'

'{"this is the JSON \\& it contains an ampersand"}'

修改

这是我们在Toad中手动导入的方式:

declare
    vOut varchar2(400);
begin
    vOut:=CartJSON.RequestEntry('JSON HERE'); -- function to parse JSON
    dbms_output.put_line('Here:'||vOut);
end;

2 个答案:

答案 0 :(得分:1)

更新

OP使用的是TOAD而不是SQL * Plus。


TOAD

在TOAD中,有三种方法可以执行语句而不用&符号替换&符号(&):

  • 菜单级别
  

查看 - > TOAD选项:转到“执行/编译”节点/项目   取消选中“提示替换变量”选项。

  • 编辑级别
  

在编辑器中右键单击并取消选中“提示替换   变量“选项。

  • 使用set define off
  • 执行脚本

大多数基于GUI的工具,如SQL Developer,TOAD等,现在支持很多SQL*Plus命令,并且执行脚本看起来与SQL*Plus中的脚本非常相似。但是,旧版GUI工具很可能不支持SQL*Plus命令。


SQL *加

&符号用作替代变量 Oracle SQL * Plus客户端功能。

SQL*Plus你可以做

  • 设定定义

例如,

SQL> SET DEFINE OFF
SQL> SELECT '{"this is the JSON && it contains an ampersand"}' str FROM dual;

STR
------------------------------------------------
{"this is the JSON && it contains an ampersand"}

或者,

  • 设置扫描

例如,

SQL> SET SCAN OFF
SQL> SELECT '{"this is the JSON && it contains an ampersand"}' str FROM dual;

STR
------------------------------------------------
{"this is the JSON && it contains an ampersand"}

SQL>

或者,

  • 或者,您可以使用 CHR(38)作为&符号。

例如,

SQL> SELECT '{"this is the JSON '|| chr(38)||chr(38) ||' it contains an ampersand"}' str FROM dual;

STR
------------------------------------------------
{"this is the JSON && it contains an ampersand"}

SQL>

答案 1 :(得分:0)

好的,现在我们知道您正在使用Toad,问题是您正在尝试运行set define off,就像它是一个sql语句一样(在caret上执行语句/ F9)而不是作为SQLPlus语句(即作为脚本的一部分 - 作为脚本/ F5执行)。您有两种选择:

1:将两个语句作为脚本运行(F5):

set define off;

declare
    vOut varchar2(400);
begin
    vOut:=CartJSON.RequestEntry('JSON HERE'); -- function to parse JSON
    dbms_output.put_line('Here:'||vOut);
end;
/
  1. 在编辑器窗口中单击鼠标右键并关闭Substition Variable Prompting,然后将匿名块作为单个语句运行(F9)。