如何将空字符串放入 JSON_OBJECT_T 对象中?

Kin*_*sar 3 oracle json plsql oracle12c oracle18c

我正在尝试JSON_OBJECT_T使用以下代码向 a 添加一个空字符串,但我得到的null是值而不是空字符串。

DECLARE
   V_OBJ JSON_OBJECT_T;
BEGIN
   V_OBJ := JSON_OBJECT_T();
   V_OBJ.PUT('customerAccRef','');
   DBMS_OUTPUT.PUT_LINE(V_OBJ.stringify);
END;
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到以下 json

{"customerAccRef":null}
Run Code Online (Sandbox Code Playgroud)

我想要如下输出

{"customerAccRef":""}
Run Code Online (Sandbox Code Playgroud)

有人可以建议我需要做什么更改才能传递空字符串吗?

Kau*_*yak 5

发生这种情况的原因是 Oracle 在内部将空字符串更改为NULL值。这是由于一些遗留原因,您可以阅读此答案以了解历史。

我在 JSON 文档中找不到任何可以让我自己绕过这个特定问题的选项,尽管如果有人能找到它,我会很高兴。

作为解决问题的方法,您可以使用TRIM函数将单个空格转换为空白字符串。

V_OBJ.PUT('customerAccRef' , TRIM(' '));
Run Code Online (Sandbox Code Playgroud)

这使

{"customerAccRef":""}
Run Code Online (Sandbox Code Playgroud)

这似乎在 Oracle 12.2 版本中都有效;我在本地机器和 Oracle 18c 中进行了测试: DEMO以及 19c(LiveSQL在线)中进行了测试

这里还需要注意的一点是 simpleselect TRIM(' ') from dual总是返回NULL, which is surprising and luckily for you, it works as expected with JSONs