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
我有 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