Как отформатировать JSON для вывода?
Хотел бы узнать, есть ли какой-нибудь способ отформатировать вывод JSON, чтобы он был более читабельный? Как например, на этом веб-сайте.
Для XML использую:
var rc refcursor
declare
xml varchar2 (128) := '<contacts><contact><name>aaa</name><phone>123/456789-0</phone></contact></contacts>';
pretty clob;
begin
select
xmlSerialize (Document xmlType (xml) indent size = 2) pretty into pretty
from dual;
open :rc for select pretty pretty from dual;
end;
/
PRETTY
--------------------------------
<contacts>
<contact>
<name>aaa</name>
<phone>123/456789-0</phone>
</contact>
</contacts>
И это работает прекрасно.
Свободный перевод вопроса How to pretty format JSON in Oracle? от участника @Iván
Ответы (2 шт):
Начиная с версии 12c можно воспользоваться функцией JSON_QUERY() с клаузой RETURNING ... PRETTY.
PRETTY
Specify PRETTY to pretty-print the return character string by inserting newline characters and indenting.
Пример синтаксиса:
JSON_QUERY(js_value, '$' RETURNING VARCHAR2(4000) PRETTY)
Воспроизводимый пример (на db<>fiddle):
with t as (
select '{"a":1, "b": [{"b1":2}, {"b2": "z"}]}' js from dual
)
select json_query (js, '$' returning varchar2 (4000) pretty) prettyjson, js
from t;
Вывод:
PRETTYJSON JS
-------------------------------- -------------------------------------
{ {"a":1, "b": [{"b1":2}, {"b2": "z"}]}
"a" : 1,
"b" :
[
{
"b1" : 2
},
{
"b2" : "z"
}
]
}
Если установленна 19c, есть еще один вариант для форматирования вывода JSON_SERIALIZE.
Эта функция позволит преобразовывать между VARCHAR2,CLOB,BLOB, и имеет опцию PRETTY:
with t as (
select '{"a":1, "b": [{"b1":2}, {"b2": "z"}]}' js
from dual
) select json_serialize (js returning varchar2 pretty) prettyjs, js
from t
/
PRETTYJS JS
-------------------------------- -------------------------------------
{ {"a":1, "b": [{"b1":2}, {"b2": "z"}]}
"a" : 1,
"b" :
[
{
"b1" : 2
},
{
"b2" : "z"
}
]
}
Свободный перевод ответа от участника @Chris Saxon