Oracle JSON_OBJECT опускает начальный ноль при строковом - PullRequest
0 голосов
/ 28 февраля 2020

Я использую Oracle Rest Data Services (ORDS для связи с некоторыми клиентами, использующими формат JSON. Когда я создаю JSON_OBJECT и пытаюсь его преобразовать в строку, некоторые числа не соответствуют стандарту ECMA-404.

PL SQL Пример:

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;

Конечное значение моего Json (это то, что я отправляю своему клиенту):

{"myNumberOutput" : .05}

То, что я ожидал:

{"myNumberOutput" : 0.05}

Странная часть в том, что если вместо 0,05 я установлю myNumber с 0,5, результат, который я получу от Oracle, будет:

{"myNumberOutput" : 0.5}

просто как то, что я ожидал.

Есть ли у кого-нибудь идеи, что я должен сделать, чтобы получить строку json с числовым форматом и начальным нулем, когда число меньше 0,1?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

@ Коннор, это результат:

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}
0 голосов
/ 28 февраля 2020

Можете ли вы запустить приведенный ниже код в вашей системе, потому что я не могу воспроизвести

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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...