我的 PersonalDetails 表中有 JSON 格式的数据,我正在尝试在单个查询中解析数据,目前我正在使用 JSON_TABLE 函数,在我的查询中,如果我尝试使用,我只能解析一列JSON_TABLE 函数两次它抛出一个错误,它们是解析单个查询中所有列的方法吗?或者除了 JSON_TABLE 之外还有其他功能吗?
示例数据
{
"FirstName" : "John",
"LastName" : "Doe",
"Job" : "Clerk",
"Address" : {
"Street" : "99 My Street",
"City" : "My City",
"Country" : "UK",
"Postcode" : "A12 34B"
},
"ContactDetails" : {
"Email" : "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b3d9dcdbdd9dd7dcd6f3d6cbd2dec3dfd69dd0dcde" rel="noreferrer noopener nofollow">[email protected]</a>",
"Phone" : "44 123 123456",
"Twitter" : "@johndoe"
},
"DateOfBirth" : "01-JAN-1980",
"Active" : true
}
我的查询
SELECT
FirstName,
LastName,
Job,
Street,
City,
Country,
Postcode,
ContactDetails,
DateOfBirth,
Active
FROM
JSON_TABLE(tab.Address, '$' COLUMNS
( Address VARCHAR(255) PATH '$.Street',
City VARCHAR(255) PATH '$.City',
Country VARCHAR(255) PATH '$.Country',
Postcode VARCHAR(255) PATH '$.Postcode',
)) JT,
PersonalDetails tab;
最佳答案
您可以使用NESTED子句:
with PersonalDetails (data) as (
select
'{
"FirstName" : "John",
"LastName" : "Doe",
"Job" : "Clerk",
"Address" : {
"Street" : "99 My Street",
"City" : "My City",
"Country" : "UK",
"Postcode" : "A12 34B"
},
"ContactDetails" : {
"Email" : "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e48e8b8c8aca808b81a4819c8589948881ca878b89" rel="noreferrer noopener nofollow">[email protected]</a>",
"Phone" : "44 123 123456",
"Twitter" : "@johndoe"
},
"DateOfBirth" : "01-JAN-1980",
"Active" : true
}'
from dual
)
SELECT jt.*
FROM PersonalDetails,
JSON_TABLE(data, '$'
COLUMNS (FirstName VARCHAR2(50), LastName VARCHAR2(50), Job, Active,
NESTED ContactDetails COLUMNS (Email VARCHAR2(100), Phone)
)
) jt;
输出:
FIRSTNAME LASTNAME JOB ACTIVE EMAIL PHONE
---------- -------- ----- ------ -------------------- ---------------
John Doe Clerk true <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="472d282f296923282207223f262a372b226924282a" rel="noreferrer noopener nofollow">[email protected]</a> 44 123 123456
关于sql - Oracle - 在单个 SQL 查询中解析多个 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61142090/