Parsa och transformera JSON-data med OPENJSON
gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (endast serverlös SQL-pool)
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
Funktionen OPENJSON
rowset konverterar JSON-text till en uppsättning rader och kolumner. När du har omvandlat en JSON-samling till en raduppsättning med OPENJSON
kan du köra valfri SQL-fråga på returnerade data eller infoga den i en SQL Server-tabell. Mer information om hur du arbetar med JSON-data i SQL Server Database Engine finns i JSON-data i SQL Server.
Funktionen OPENJSON
tar ett enda JSON-objekt eller en samling JSON-objekt och omvandlar dem till en eller flera rader. Som standard returnerar funktionen OPENJSON
följande data:
- Från ett JSON-objekt returnerar funktionen alla nyckel/värde-par som hittas på den första nivån.
- Från en JSON-matris returnerar funktionen alla element i matrisen med sina index.
Du kan lägga till en valfri WITH
-sats för att tillhandahålla ett schema som uttryckligen definierar strukturen för utdata.
OPENJSON med standardutdata
När du använder funktionen OPENJSON
utan att ange ett explicit schema för resultatet , det vill sa utan en WITH
-sats efter OPENJSON
, returnerar funktionen en tabell med följande tre kolumner:
- Egenskapens
name
i indataobjektet (eller indexet för elementet i indatamatrisen). - Egenskapens eller matriselementets
value
. -
type
(till exempel sträng, tal, boolesk, matris eller objekt).
OPENJSON
returnerar varje egenskap för JSON-objektet, eller varje element i matrisen, som en separat rad.
I följande exempel används OPENJSON
med standardschemat – det vill säga utan den valfria WITH
-satsen – och returnerar en rad för varje egenskap för JSON-objektet.
DECLARE @json NVARCHAR(MAX);
SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';
SELECT *
FROM OPENJSON(@json);
Här är resultaten.
nyckel | värde | typ |
---|---|---|
name |
John |
1 |
surname |
Doe |
1 |
age |
45 |
2 |
skills |
[ "SQL" ,"C#" ,"MVC" ] |
4 |
Mer information och exempel finns i Använda OPENJSON med standardschemat.
För syntax och användning, se OPENJSON.
OPENJSON-utdata med en explicit struktur
När du anger ett schema för resultatet med hjälp av WITH
-satsen för funktionen OPENJSON
returnerar funktionen en tabell med endast de kolumner som du definierar i WITH
-satsen. I den valfria WITH
-satsen anger du en uppsättning utdatakolumner, deras typer och sökvägarna för JSON-källegenskaperna för varje utdatavärde.
OPENJSON
itererar genom matrisen med JSON-objekt, läser värdet på den angivna sökvägen för varje kolumn och konverterar värdet till den angivna typen.
I följande exempel används OPENJSON
med ett schema för utdata som du uttryckligen anger i WITH
-satsen.
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{
"Order": {
"Number": "SO43659",
"Date": "2024-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2024-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]';
SELECT *
FROM OPENJSON(@json) WITH (
Number VARCHAR(200) '$.Order.Number',
DATE DATETIME '$.Order.Date',
Customer VARCHAR(200) '$.AccountNumber',
Quantity INT '$.Item.Quantity'
);
Här är resultaten.
Nummer | Datum | Kund | Kvantitet |
---|---|---|---|
SO43659 |
2024-05-31T00:00:00 |
AW29825 |
1 |
SO43661 |
2024-06-01T00:00:00 |
AW73565 |
3 |
Den här funktionen returnerar och formaterar elementen i en JSON-matris.
För varje element i JSON-matrisen genererar
OPENJSON
en ny rad i utdatatabellen. De två elementen i JSON-matrisen konverteras till två rader i den returnerade tabellen.För varje kolumn, som anges med hjälp av
colName type json_path
syntax, konverterarOPENJSON
värdet som finns i varje matriselement på den angivna sökvägen till den angivna typen. I det här exemplet hämtas värden för kolumnenDate
från varje element på sökvägen$.Order.Date
och konverteras till datetime-värden.
Mer information och exempel finns i Använda OPENJSON med ett explicit schema (SQL Server).
För syntax och användning, se OPENJSON.
OPENJSON kräver kompatibilitetsnivå 130
Funktionen OPENJSON
är endast tillgänglig under kompatibilitetsnivå 130
och större. Om din databaskompatibilitetsnivå är lägre än 130
kan SQL Server inte hitta och köra funktionen OPENJSON
. Andra inbyggda JSON-funktioner är tillgängliga på alla kompatibilitetsnivåer.
Du kan kontrollera kompatibilitetsnivån i sys.databases
-vyn eller i databasegenskaperna och ändra kompatibilitetsnivån för en databas med hjälp av följande kommando:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;