0

我正在使用 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 时,前导零?

4

2 回答 2

0

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

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}
于 2020-02-28T03:26:10.803 回答
0

@Connor,这是结果:

Connected to:
Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

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":.05}
于 2020-02-28T16:41:08.247 回答