将带有对象数组的 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,将图像加载到单元格消失

将 .json 文件数据加载到 Postgres for Rails 5 API

如何将 json 文件加载到本地存储中?

BQ 加载带有数组数组的 JSON 文件

Restkit 将对象加载到现有对象