首页 > 解决方案 > Oracle JSON_OBJECT 在字符串化时省略前导零

问题描述

我正在使用 Oracle Rest Data Services(ORDS 与使用 JSON 格式的一些客户进行通信。当我创建 JSON_OBJECT 并尝试对其进行字符串化时,某些数字不符合 ECMA-404 标准。

PLSQL 示例:

PROCEDURE TEST_PROC(myJson OUT CLOB) IS
    myNumber NUMBER;
BEGIN
   jsonObject := new JSON_OBJECT_T();
   myNumber := 0.05;
   jsonObject.put("myNumberOutput", myNumber);
   myJson   := jsonObject.to_clob();
END PROCEDURE;

myJson 的最终值(这是我发送给我的客户的)是:

{"myNumberOutput" : .05}

我所期望的:

{"myNumberOutput" : 0.05}

奇怪的是,如果我将 myNumber 设置为 0.5 而不是 0.05,那么我从 Oracle 得到的结果是:

{"myNumberOutput" : 0.5}

就像我预期的那样。

有没有人知道我应该怎么做才能获得具有数字格式的 json 字符串,并且当数字小于 0.1 时,前导零?

标签: oracleplsqloracle-ords

解决方案


你能在你的系统上运行下面的代码吗,因为我无法重现

SQL> variable c clob
SQL> declare
  2      myNumber NUMBER;
  3      jsonObject JSON_OBJECT_T := JSON_OBJECT_T();
  4  BEGIN
  5     myNumber := 0.05;
  6     jsonObject.put('myNumberOutput', myNumber);
  7     :c   := jsonObject.to_clob();
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> print c

C
-----------------------------------------------------
{"myNumberOutput":0.05}

推荐阅读