如何在Oracle中解析json?

yjghlzjz  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(238)

我有下面的json字符串:

{"configuration":{"dates":["a","b","c"],"areas":["0","1"]}}

我试图得到日期(a,B,c)和面积(0,1)的值;
我试着得到如下日期:

select * from xmltable ('/json/row' passing apex_json.to_xmltype(JsonText) 
columns 
    dates varchar2(15) path '/row/configuration/dates');

但是查询没有返回任何内容。
有没有人知道如何解析这个json?
谢谢,

yvfmudvl

yvfmudvl1#

不能使用XML分析器分析JSON数据;请使用JSON解析器,如JSON_TABLE

SELECT a.area,
       d.dt
FROM   (
         select area,
                dates,
                ROWNUM AS rn -- Force the sub-query to be materialized.
         from   table_name t
                CROSS APPLY JSON_TABLE(
                  t.JsonText,
                  '$.configuration'
                  COLUMNS (
                    dates CLOB FORMAT JSON PATH '$.dates',
                    NESTED PATH '$.areas[*]' COLUMNS (
                      area VARCHAR2(20) PATH '$'
                    )
                  )
                )
       ) a
       CROSS APPLY JSON_TABLE(
         a.dates,
         '$[*]'
         COLUMNS (
           dt VARCHAR2(20) PATH '$'
         )
       ) d;

其中,对于示例数据:

CREATE TABLE table_name ( JsonText CLOB );

INSERT INTO table_name (jsontext)
VALUES ('{"configuration":{"dates":["a","b","c"],"areas":["0","1"]}}');

输出:
| 面积|数据传输|
| - -|- -|
| 第0页|一种|
| 第0页|B|
| 第0页|C语言|
| 一个|一种|
| 一个|B|
| 一个|C语言|
如果只想提取JSON数组,则:

SELECT j.*
FROM   table_name t
       CROSS APPLY JSON_TABLE(
         t.jsontext,
         '$.configuration'
         COLUMNS (
           dates CLOB FORMAT JSON PATH '$.dates',
           areas CLOB FORMAT JSON PATH '$.areas'
         )
       ) j

输出:
| 日期|区域|
| - -|- -|
| [“甲”、“B”、“丙”]|[“0”、“1”]|
fiddle

相关问题