如何在Oracle中美化格式化JSON?

8

我想知道是否有办法在Oracle中格式化JSON(就像这个网站的示例一样)。

在XML中,我使用了:

SELECT XMLSERIALIZE(Document XMLTYPE(V_RESPONSE) AS CLOB INDENT SIZE = 2)
INTO V_RESPONSE
FROM DUAL;     

而且它运作得非常好。

2个回答

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

PRETTY:指定PRETTY以通过插入换行符和缩进来使返回字符串更易读

表达式:

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) pretty_js, js from t;

收益率:

PRETTY_JS                 | JS
--------------------------|----------------------------------------
{                         | {"a":1, "b": [{"b1":2}, {"b2": "z"}]}
  "a" : 1,                | 
  "b" :                   |
  [                       |
    {                     |
      "b1" : 2            | 
    },                    |
    {                     |
      "b2" : "z"          |
    }                     |
  ]                       |
}                         |

1
谢谢,这很有用。 - Iván

8
当你有幸使用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"
    }
  ]
} 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接