如何将空字符串放入 JSON_OBJECT_T 对象中?
How to put empty string in JSON_OBJECT_T object?
我正在尝试使用以下代码将空字符串添加到 JSON_OBJECT_T
,但我得到的值是 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;
当我这样做时,我得到以下 json
{"customerAccRef":null}
我想要如下输出
{"customerAccRef":""}
有人可以建议我需要做哪些更改才能传递空字符串吗?
发生这种情况的原因是 Oracle 在内部将空字符串更改为 NULL
值。这是由于一些遗留原因,您可以阅读 this answer 了解历史。
我在 JSON 文档中找不到任何可以自己绕过这个特定问题的选项,但如果有人能找到它我会很高兴。
作为您问题的解决方法,您可以使用 TRIM
函数将单个 space 转换为空白字符串。
V_OBJ.PUT('customerAccRef' , TRIM(' '));
这给出了
{"customerAccRef":""}
这似乎在 Oracle 12.2 版本中都有效;我在本地机器和 Oracle 中进行了测试
18c : DEMO, as well as in 19c (LiveSQL online)
这里还要注意的一点是,一个简单的 select TRIM(' ') from dual
总是 returns NULL
,这对你来说是令人惊讶和幸运的,它与 JSON 一起按预期工作小号
在 19c 中,使用 put(..., '')
你会得到一个空字符串。
使用 put_null
或 put(..., to_char(null))
、put(..., <unitializedString>)
你会得到“真正的”空值。
DECLARE
V_OBJ JSON_OBJECT_T;
V_STRING VARCHAR2(20);
BEGIN
V_OBJ := JSON_OBJECT_T();
V_OBJ.PUT('doubleSingleQuotes','');
V_OBJ.PUT('toCharNull',to_char(null));
V_OBJ.PUT('uninitializedStringVariable',v_string);
V_OBJ.PUT_null('null');
V_OBJ.PUT('trimSpace', trim(' '));
DBMS_OUTPUT.PUT_LINE(V_OBJ.stringify);
END;
... 给出:
{"doubleSingleQuotes":"","toCharNull":null,"uninitializedStringVariable":null,"null":null,"trimSpace":""}
我正在尝试使用以下代码将空字符串添加到 JSON_OBJECT_T
,但我得到的值是 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;
当我这样做时,我得到以下 json
{"customerAccRef":null}
我想要如下输出
{"customerAccRef":""}
有人可以建议我需要做哪些更改才能传递空字符串吗?
发生这种情况的原因是 Oracle 在内部将空字符串更改为 NULL
值。这是由于一些遗留原因,您可以阅读 this answer 了解历史。
我在 JSON 文档中找不到任何可以自己绕过这个特定问题的选项,但如果有人能找到它我会很高兴。
作为您问题的解决方法,您可以使用 TRIM
函数将单个 space 转换为空白字符串。
V_OBJ.PUT('customerAccRef' , TRIM(' '));
这给出了
{"customerAccRef":""}
这似乎在 Oracle 12.2 版本中都有效;我在本地机器和 Oracle 中进行了测试 18c : DEMO, as well as in 19c (LiveSQL online)
这里还要注意的一点是,一个简单的 select TRIM(' ') from dual
总是 returns NULL
,这对你来说是令人惊讶和幸运的,它与 JSON 一起按预期工作小号
在 19c 中,使用 put(..., '')
你会得到一个空字符串。
使用 put_null
或 put(..., to_char(null))
、put(..., <unitializedString>)
你会得到“真正的”空值。
DECLARE
V_OBJ JSON_OBJECT_T;
V_STRING VARCHAR2(20);
BEGIN
V_OBJ := JSON_OBJECT_T();
V_OBJ.PUT('doubleSingleQuotes','');
V_OBJ.PUT('toCharNull',to_char(null));
V_OBJ.PUT('uninitializedStringVariable',v_string);
V_OBJ.PUT_null('null');
V_OBJ.PUT('trimSpace', trim(' '));
DBMS_OUTPUT.PUT_LINE(V_OBJ.stringify);
END;
... 给出:
{"doubleSingleQuotes":"","toCharNull":null,"uninitializedStringVariable":null,"null":null,"trimSpace":""}