Oracle - json 数据可互换地包含 array/string

Oracle - json data contains array/string interchangeably

我有 json 数据,我正试图将该数据放在 oracle 的不同列中。 问题是列之一有时包含一个数组,有时包含字符串。 我知道有不同的命令将 json 数组放入列,但如果列有时填充字符串,有时填充数组,我该如何编写 sql 以便它获取所有数据 -

SELECT id,array1
FROM   (
  select '{
    "data": [
      {
        "id": 1,
        "array1": [ "INFO", "ABC", ]
      },
      {
        "id": 2,
        "array1": "TEST",
      }
    ]
  }' AS JSON_DATA
  FROM DUAL
) I,
json_table(
  i.JSON_DATA ,
  '$.data[*]'  
  COLUMNS (
    array1 varchar2(4000) FORMAT JSON path'$."array1"',
    ID     varchar2(4000) path '$."id"'
  )  
) a 

sql 的输出:

ID  ARRAY1
1   ["INFO","ABC"]
2   

期望的输出:

ID  ARRAY1
1   ["INFO","ABC"]
2   TEST

array1 varchar2(4000) PATH '$."array1"'可以和

一起考虑

array1 varchar2(4000) FORMAT JSON PATH '$."array1"'

因为 array1 键的值存在两种情况。所以,使用 :

SELECT ID, NVL(array1, array1_) AS array1
  FROM   
  (
   SELECT '{
        "data": [

          {
            "id": 1,
            "array1": [ "INFO", "ABC" ]
          },
          {
            "id": 2,
            "array1": "TEST"
          }
        ]
      }' AS JSON_DATA
     FROM DUAL
     ) I
    CROSS JOIN 
    JSON_TABLE(
      i.JSON_DATA ,
      '$.data[*]'  
      COLUMNS (
           array1  varchar2(4000) PATH '$."array1"',
           array1_ varchar2(4000) FORMAT JSON PATH '$."array1"',
           ID      varchar2(4000) PATH '$."id"'
      )  
     ) A

Demo