Как поместить пустую строку в объект JSON_OBJECT_T? - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь добавить пустую строку в 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 Ответ

1 голос
/ 04 апреля 2019

Причина, по которой это происходит, заключается в том, что Oracle внутренне изменяет пустую строку на значения NULL. Это связано с какой-то устаревшей причиной, и вы можете прочитать этот ответ , чтобы узнать историю.

Я не смог найти где-нибудь в документации JSON вариант с возможностью обойти эту проблему самостоятельно, хотя я был бы рад, если бы кто-то смог ее найти.

В качестве обходного пути к вашей проблеме, вы можете использовать функцию TRIM для преобразования одного пробела в пустую строку.

V_OBJ.PUT('customerAccRef' , TRIM(' '));

что дает

{"customerAccRef":""}

Кажется, это работает как в версии Oracle 12.2; Я проверил на моей локальной машине и в Oracle 18c: DEMO , а также в 19c (LiveSQL онлайн)

Следует также отметить, что простое select TRIM(' ') from dual всегда возвращает NULL, что удивительно и, к счастью для вас, оно работает, как и ожидалось, с JSON

...