Oracle SQL处理具有相同条目名称的JSON时出现问题



我正试图从JSON文件中获取一些数据,并将这些数据以不同的格式存储在Oracle中。目前我有以下表格:

CREATE TABLE json_documents (
id    RAW(16) NOT NULL,
data  CLOB,
CONSTRAINT json_documents_pk PRIMARY KEY (id),
CONSTRAINT json_documents_json_chk CHECK (data IS JSON)
);

我插入了以下内容:

INSERT INTO json_documents (id, data)
VALUES (SYS_GUID(),
'[{  
"rid7":"9R1CODE",
"rid":[  
]
},
{  
"rid7":"ZB0CODE",
"rid":[  
{  
"rid10":"WB10123124",
"rid17":"WB10123124ZB0CODE"
}
]
},
{  
"rid7":"ZB1CODE",
"rid":[  
{  
"rid10":"ZKH9875435",
"rid17":"ZKH9875435ZB1CODE"
}
]
}]');

现在,如果我执行以下选择:

SELECT a.data.rid7
FROM JSON_DOCUMENTS a;

我得到以下结果:

[9R1CODE,ZB0CODE,ZB1CODE]

而我希望在一列中获得结果,但在不同的行中。有办法做到这一点吗?如何区分json_documents表中同一行中的多个"rid7"?

此外,我如何访问JSON文件中的不同"rid10"?

我还尝试以以下方式使用json_value

SELECT JSON_VALUE(a.data, '$.rid7')
FROM JSON_DOCUMENTS a;

但是查询结果为空值。为什么?

您可以为此目的使用json_table。NESTED PATH参数起作用。

请根据你得到的结果核对我的答案。

select CONDITION from 
json_table('{"test": ["9R1CODE","ZB0CODE","ZB1CODE"]}', '$' 
columns (test varchar2(100) format json path '$',
nested path '$.test[*]'
columns (  condition varchar2(100)  path '$')));

对于第二个问题,您可以使用

SELECT JSON_VALUE(a.data, '$.*.rid10')
FROM JSON_DOCUMENTS a;

最新更新