如何解决将嵌套的 JSON 数据插入 SQL
我一直在研究将 Xero Report 数据引入我们的数据仓库的问题。 Xero 生成数据的方式很烦人,而且嵌套很深。
{
"Id": "2af62c5f-dc79-4b6d-9658-bd94446e3c01","Status": "OK","ProviderName": "Data Warehouse","DateTimeUTC": "/Date(1626326365968)/","Reports": [
{
"ReportID": "ProfitAndLoss","ReportName": "Profit and Loss","ReportType": "ProfitAndLoss","ReportTitles": [
"Profit and Loss","Acme","1 July 2021 to 31 July 2021"
],"ReportDate": "15 July 2021","UpdatedDateUTC": "/Date(1626326365968)/","Fields": [],"Rows": [
{
"RowType": "Header","Cells": [
{
"Value": ""
},{
"Value": "31 Jul 21"
}
]
},{
"RowType": "Section","Title": "Less Cost of Sales","Rows": [
{
"RowType": "Row","Cells": [
{
"Value": "EPAY","Attributes": [
{
"Value": "10f71a2c-afa9-4005-824b-38c722896e44","Id": "account"
}
]
},{
"Value": "32556.90","Id": "account"
}
]
}
]
},{
"RowType": "Row","Cells": [
{
"Value": "Purchases","Attributes": [
{
"Value": "b4dd09f7-37e6-4ac5-87a0-61d11b5cd4c0",{
"Value": "1135980.98","Id": "account"
}
]
}
]
}
}
}
}
此 JSON 是直接 REPORT API JSON 的示例。
到目前为止,我一直在使用 sql 语句来摄取它,
DECLARE @json NVARCHAR(1000)
SELECT @json =
N'
<JSON here<'
SELECT
JSON_Value (c.value,'$.Reports.ReportID') as ReportID,JSON_Value (c.value,'$.Reports.ReportDate') as ReportDate,'$.Reports.Report') as ReportTitle,JSON_Value (p.value,'$.Reports.Rows.RowType') as RowType,'$.Reports.Rows.RowType.Row.Cells.Value') as ReportValue
FROM OPEnjsON (@json,'$.Reports.ReportID') as c
CROSS APPLY OPEnjsON (c.value,'$.Reports.Rows.RowType') as p
我现在碰壁了,不知道从哪里开始。希望得到一些建议来帮助我进入下一步。
解决方法
有一个快速的小提琴并得到了这个:
Select * FROM OPENJSON((@json)) WITH
(
Reports NVARCHAR(MAX)'$.Reports' AS JSON
) AS JsonProccessingData
CROSS APPLY OPENJSON (Reports) WITH
(
ReportID VARCHAR(500) '$.ReportID',ReportDate VARCHAR(200) '$.ReportDate',ReportTitle VARCHAR(200) '$.ReportName',Rows NVARCHAR(MAX)'$.Rows' AS JSON
)
CROSS APPLY OPENJSON (Rows) WITH
(
RowType VARCHAR(500) '$.RowType',Cells NVARCHAR(MAX)'$.Cells' AS JSON
)
CROSS APPLY OPENJSON (Cells) WITH
(
ReportValue NVARCHAR(MAX)'$.Value' AS JSON
)
虽然不确定如何处理多个值,希望这有点帮助吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。