使用OPENJSON

时间:2017-11-24 14:46:30

标签: json tsql azure-sql-database

我正在尝试使用OPENJSON将json文件解析为sql。我的结构看起来像这样:

{
    "definitions": {            
        "Event": {
            "properties": {
                "id": {
                    "type": "string",
                    "description": "System-generated Id"
                },
                "transactionDateTime": {
                    "type": "string",
                    "description": "RFC3339-compliant, system-generated timestamp"
                },
                "Name": {
                    "type": "string",
                    "description": "blah"
                }
        }
    }
}

我正在尝试使用选择查询阅读type部分中每个项目的properties字段。

drop table if exists #temp;
SELECT * into #temp FROM OPENROWSET (BULK 'C:\swagger.json', SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn, '$.definitions.Event.properties');
select * from #temp

这会返回一个表#temp,其中包含一个名为[key]的列,其中包含idDateTimeName。在名为value的相邻列中,存在批量json数据,例如{ "type":"string", "description": "....."}

对于[key]列中的每个项目,我想要一个带有type的相邻列,例如string。我想在不将[key]字段名称硬编码到sql查询中的情况下执行此操作。

enter image description here

1 个答案:

答案 0 :(得分:0)

我能够找到以下解决方案,首先使用变量导入json,然后调用OPENROWSET来读取json。

DECLARE @json varchar(max);
SELECT @json = BulkColumn FROM OPENROWSET(BULK 'C:\swagger.json', SINGLE_CLOB) as j;

DROP TABLE if exists #temp;
SELECT value INTO #temp FROM OPENJSON(@json, '$.definitions.Event.properties')