如何将空字符串放入 JSON_OBJECT_T 对象?
Posted
技术标签:
【中文标题】如何将空字符串放入 JSON_OBJECT_T 对象?【英文标题】:How to put empty string in JSON_OBJECT_T object? 【发布时间】:2019-04-04 12:37:21 【问题描述】:我正在尝试使用以下代码向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":""
有人可以建议我需要做什么更改才能传递一个空字符串吗?
【问题讨论】:
【参考方案1】:发生这种情况的原因是 Oracle 在内部将空字符串更改为 NULL
值。这是由于一些遗留原因,您可以阅读this answer 了解历史。
我在 JSON 文档中找不到任何可以自己绕过这个特定问题的选项,但如果有人能找到它,我会很高兴。
作为解决问题的方法,您可以使用TRIM
函数将单个空格转换为空白字符串。
V_OBJ.PUT('customerAccRef' , TRIM(' '));
给了
"customerAccRef":""
这似乎在 Oracle 12.2 版本中都有效;我在本地机器和 Oracle 中进行了测试 18c:DEMO,以及19c (LiveSQL online)
这里还需要注意一点,一个简单的select TRIM(' ') from dual
总是返回NULL
,这对你来说是令人惊讶和幸运的,它可以与 JSON 一样工作
【讨论】:
谢谢,我也有同样的想法,但正在检查是否可以不调用任何函数?另外你对我的另一篇文章有什么建议吗? ***.com/questions/54644055/… @KinjanBhavsar:对不起。我认为我永远无法回答 Chris Saxon 无法回答的 Oracle JSON 相关问题(或任何 SQL)(他也没有回答)在您在问题中添加详细信息之后)。您可能会提出一个新问题,将前一个问题与所需的详细信息联系起来,他或其他人可能会帮助您。关于这个特定问题,您是否要等待其他答案(可能是 Chris 本人可以,不使用TRIM
)或继续此问题,由您决定。
我使用了您提供的解决方法,并且工作正常。谢谢 另外,如果您可以为***.com/questions/55535454/… 提出任何建议,那将是一个很大的帮助。【参考方案2】:
在 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 对象?的主要内容,如果未能解决你的问题,请参考以下文章
C ++的“map”容器是否对字符串的连续子串应用Rabin-Karp算法?