2017-11-24 3 views
0

Ich versuche, eine JSON-Datei in SQL unter Verwendung OPENJSON zu analysieren. Ich habe eine Struktur, die wie folgt aussieht:Parsing JSON in Azure SQL mit OPENJSON

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

Ich versuche, das type Feld für jedes Element in dem properties Abschnitt mit einer Auswahlabfrage zu lesen.

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 

Dies liefert eine Tabelle #temp mit einer Spalte namens [key] die id enthält, DateTime, Name. In der benachbarten Spalte mit der Bezeichnung value gibt es JSON-Hauptdaten, z. { "type":"string", "description": "....."}

Für jeden Artikel in [key] Spalte hätte ich gerne eine benachbarte Spalte mit der type, z. string. Ich würde dies gerne tun, ohne die [key] Feldnamen in die SQL-Abfrage zu codieren.

enter image description here

Antwort

0

konnte ich die folgende Lösung finden, die eine Variable mit dem json ersten importieren, dann OPENROWSET Aufruf der json zu lesen.

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')