将带有对象数组的 json 文件从文件加载到 SQL 中
Posted
技术标签:
【中文标题】将带有对象数组的 json 文件从文件加载到 SQL 中【英文标题】:Load json file with object array into SQL from file 【发布时间】:2022-01-19 01:16:13 【问题描述】:我尝试将 json 格式的文件加载到 SQL Server 2019 表中。其中两个字段具有我想加载的对象数组,这些数组被解析为单独的行,并且没有括号、引号和前导/尾随空格。
json 文件的内容如下所示
[
"TIN": "1234",
"clinic_name": "Acme clinic",
"specialties": [
"Hand Surgery",
"Orthopedic Surgery"
],
"languages_spoken": [
"English",
"Spanish"
],
"approval_date": "2020-02-18",
,
"TIN": "5678",
"clinic_name": "Elm clinic",
"specialties": [
"Hematology & Oncology",
"Internal Medicine"
],
"languages_spoken": [
"English",
"Russian"
],
"approval_date": "2020-05-17",
]
数组加载如下:
这是我目前拥有的:
Declare @ProviderDirCO varchar (max)
SELECT @ProviderDirCO=BULKCOLUMN
FROM OPENROWSET (BULK 'F:\JSON\TESTProviderDirectory.json', SINGLE_CLOB) json
insert into [Providers].ProviderDirTest_DH
SELECT distinct
JSON_VALUE(a.value, '$.TIN') as TIN,
JSON_VALUE(a.value, '$.clinic_name') as clinic_name,
JSON_QUERY(a.value, '$.specialties') as specialties,
JSON_QUERY(a.value, '$.languages_spoken') as languages_spoken
FROM OPENJSON(@ProviderDirCO ) as a
我可以将它直接加载到已经解析出数组的 SQL 表中,还是需要加载到临时表中然后从那里清理?
【问题讨论】:
【参考方案1】:想通了。
Declare @ProviderDirCO varchar (max)
SELECT @ProviderDirCO=BULKCOLUMN
FROM OPENROWSET (BULK 'F:\JSON\TESTProviderDirectory.json', SINGLE_CLOB) json
insert into [Providers].[ProviderDirTest_DH]
SELECT
JSON_VALUE(a.value, '$.TIN') as TIN,
JSON_VALUE(a.value, '$.clinic_name') as clinic_name,
b.specialties,
c.languages_spoken
FROM OPENJSON(@ProviderDirCO ) as a
CROSS APPLY OPENJSON(value, '$.specialties')
WITH (
specialties NVARCHAR(100) '$'
)
as b
CROSS APPLY OPENJSON(value, '$.languages_spoken')
WITH (
languages_spoken NVARCHAR(100) '$'
)
as c
【讨论】:
以上是关于将带有对象数组的 json 文件从文件加载到 SQL 中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Pig Latin 中每行加载一个带有 JSON 数组的文件
带有Json文件的UITableView,将图像加载到单元格消失