如何在 Oracle 中漂亮地格式化 JSON?

Ivá*_*án 5 sql string oracle json plsql

我想知道是否有任何方法可以在 Oracle 中格式化 JSON(就像这个网站示例一样)

在 XML 中,我使用了:

SELECT XMLSERIALIZE(Document XMLTYPE(V_RESPONSE) AS CLOB INDENT SIZE = 2)
INTO V_RESPONSE
FROM DUAL;     
Run Code Online (Sandbox Code Playgroud)

而且效果很好。

GMB*_*GMB 8

在 Oracle 12c 中,您可以使用带有子句JSON_QUERY()函数RETURNING ... PRETTY

PRETTY: 指定PRETTY通过插入换行符和缩进来漂亮地打印返回字符串

表达 :

JSON_QUERY(js_value, '$' RETURNING VARCHAR2(4000) PRETTY)
Run Code Online (Sandbox Code Playgroud)

DB Fiddle 上的演示

with t as (select '{"a":1, "b": [{"b1":2}, {"b2": "z"}]}' js from dual)
select json_query(js, '$' returning varchar2(4000) pretty) pretty_js, js from t;
Run Code Online (Sandbox Code Playgroud)

产量:

PRETTY_JS                 | JS
--------------------------|----------------------------------------
{                         | {"a":1, "b": [{"b1":2}, {"b2": "z"}]}
  "a" : 1,                | 
  "b" :                   |
  [                       |
    {                     |
      "b1" : 2            | 
    },                    |
    {                     |
      "b2" : "z"          |
    }                     |
  ]                       |
}                         |
Run Code Online (Sandbox Code Playgroud)


Chr*_*xon 5

当您有幸使用 Oracle Database 19c 时,还有另一个用于漂亮打印的选项:JSON_serialize

这允许您在 VARCHAR2/CLOB/BLOB 之间转换 JSON。并包含一个 PRETTY 子句:

with t as (
  select '{"a":1, "b": [{"b1":2}, {"b2": "z"}]}' js
  from dual
)
select json_serialize (
         js returning varchar2 pretty
       ) pretty_js,
       js
from   t;

PRETTY_JS               JS
{                       {"a":1, "b": [{"b1":2}, {"b2": "z"}]}  
  "a" : 1,
  "b" :
  [
    {
      "b1" : 2
    },
    {
      "b2" : "z"
    }
  ]
} 
Run Code Online (Sandbox Code Playgroud)