Microsoft SQL Server
OPENJSON
Zoeken…
Get key: waardeparen uit JSON-tekst
OPENJSON-functie parseert JSON-tekst en retourneert alle sleutel: waardeparen op het eerste niveau van JSON:
declare @json NVARCHAR(4000) = N'{"Name":"Joe","age":27,"skills":["C#","SQL"]}';
SELECT * FROM OPENJSON(@json);
sleutel | waarde | type |
---|---|---|
Naam | Joe | 1 |
leeftijd | 27 | 2 |
vaardigheden | [ "C #", "SQL"] | 4 |
Kolomtype beschrijft het type waarde, dwz null (0), string (1), nummer (2), boolean (3), array (4) en object (5).
Transformeer JSON-array in rijen
De functie OPENJSON ontleedt de verzameling JSON-objecten en retourneert waarden uit JSON-tekst als een reeks rijen.
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00","Customer": "MSFT","Price":59.99,"Quantity":1},
{"Number":"SO43661","Date":"2011-06-01T00:00:00","Customer":"Nokia","Price":24.99,"Quantity":3}
]'
SELECT *
FROM OPENJSON (@json)
WITH (
Number varchar(200),
Date datetime,
Customer varchar(200),
Quantity int
)
In de WITH-clausule wordt het retourschema van de OPENJSON-functie opgegeven. Sleutels in de JSON-objecten worden opgehaald met kolomnamen. Als een sleutel in JSON niet is opgegeven in de clausule WITH (bijvoorbeeld Price in dit voorbeeld), wordt deze genegeerd. Waarden worden automatisch omgezet in opgegeven typen.
Aantal | Datum | Klant | Aantal stuks |
---|---|---|---|
SO43659 | 2011-05-31T00: 00: 00 | MSFT | 1 |
SO43661 | 2011-06-01T00: 00: 00 | Nokia | 3 |
Transformeer geneste JSON-velden in rijen
De functie OPENJSON ontleedt de verzameling JSON-objecten en retourneert waarden uit JSON-tekst als een reeks rijen. Als de waarden in het invoerobject zijn genest, kan een aanvullende toewijzingsparameter worden opgegeven in elke kolom in de clausule WITH:
declare @json nvarchar(4000) = N'[
{"data":{"num":"SO43659","date":"2011-05-31T00:00:00"},"info":{"customer":"MSFT","Price":59.99,"qty":1}},
{"data":{"number":"SO43661","date":"2011-06-01T00:00:00"},"info":{"customer":"Nokia","Price":24.99,"qty":3}}
]'
SELECT *
FROM OPENJSON (@json)
WITH (
Number varchar(200) '$.data.num',
Date datetime '$.data.date',
Customer varchar(200) '$.info.customer',
Quantity int '$.info.qty',
)
In de WITH-clausule wordt het retourschema van de OPENJSON-functie opgegeven. Nadat het type is opgegeven, pad naar de JSON-knooppunten waar de geretourneerde waarde moet worden gevonden. Sleutels in de JSON-objecten worden door deze paden opgehaald. Waarden worden automatisch omgezet in opgegeven typen.
Aantal | Datum | Klant | Aantal stuks |
---|---|---|---|
SO43659 | 2011-05-31T00: 00: 00 | MSFT | 1 |
SO43661 | 2011-06-01T00: 00: 00 | Nokia | 3 |
Binnenste JSON-subobjecten extraheren
OPENJSON kan fragmenten van JSON-objecten in de JSON-tekst extraheren. Stel in de kolomdefinitie die verwijst naar het JSON-subobject het type nvarchar (max) en de AS JSON-optie in:
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00","info":{"customer":"MSFT","Price":59.99,"qty":1}},
{"Number":"SO43661","Date":"2011-06-01T00:00:00","info":{"customer":"Nokia","Price":24.99,"qty":3}}
]'
SELECT *
FROM OPENJSON (@json)
WITH (
Number varchar(200),
Date datetime,
Info nvarchar(max) '$.info' AS JSON
)
Kolom Info wordt toegewezen aan "Info" -object. Resultaten zullen zijn:
Aantal | Datum | info |
---|---|---|
SO43659 | 2011-05-31T00: 00: 00 | { "Klant": "MSFT", "prijs": 59.99, "aantal": 1} |
SO43661 | 2011-06-01T00: 00: 00 | { "Klant": "Nokia", "prijs": 24.99, "qty": 3} |
Werken met geneste JSON-subarrays
JSON kan een complexe structuur hebben met innerlijke arrays. In dit voorbeeld hebben we een reeks orders met een geneste subarray van OrderItems.
declare @json nvarchar(4000) = N'[
{"Number":"SO43659","Date":"2011-05-31T00:00:00",
"Items":[{"Price":11.99,"Quantity":1},{"Price":12.99,"Quantity":5}]},
{"Number":"SO43661","Date":"2011-06-01T00:00:00",
"Items":[{"Price":21.99,"Quantity":3},{"Price":22.99,"Quantity":2},{"Price":23.99,"Quantity":2}]}
]'
We kunnen eigenschappen op rootniveau parseren met OPENJSON die Items array AS JSON-fragment retourneren. Vervolgens kunnen we OPENJSON opnieuw toepassen op Items-array en de binnenste JSON-tabel openen. De tabel op het eerste niveau en de binnenste tabel worden "samengevoegd" zoals in de JOIN tussen standaardtabellen:
SELECT *
FROM
OPENJSON (@json)
WITH ( Number varchar(200), Date datetime,
Items nvarchar(max) AS JSON )
CROSS APPLY
OPENJSON (Items)
WITH ( Price float, Quantity int)
resultaten:
Aantal | Datum | items | Prijs | Aantal stuks |
---|---|---|---|---|
SO43659 | 2011-05-31 00: 00: 00.000 | [{ "Prijs": 11.99, "Aantal": 1}, { "Prijs": 12.99, "Hoeveelheid": 5}] | 11.99 | 1 |
SO43659 | 2011-05-31 00: 00: 00.000 | [{ "Prijs": 11.99, "Aantal": 1}, { "Prijs": 12.99, "Hoeveelheid": 5}] | 12.99 | 5 |
SO43661 | 2011-06-01 00: 00: 00.000 | [{ "Prijs": 21.99, "Hoeveelheid": 3}, { "Prijs": 22.99, "Hoeveelheid": 2}, { "Prijs": 23.99, "Hoeveelheid": 2}] | 21.99 | 3 |
SO43661 | 2011-06-01 00: 00: 00.000 | [{ "Prijs": 21.99, "Hoeveelheid": 3}, { "Prijs": 22.99, "Hoeveelheid": 2}, { "Prijs": 23.99, "Hoeveelheid": 2}] | 22.99 | 2 |
SO43661 | 2011-06-01 00: 00: 00.000 | [{ "Prijs": 21.99, "Hoeveelheid": 3}, { "Prijs": 22.99, "Hoeveelheid": 2}, { "Prijs": 23.99, "Hoeveelheid": 2}] | 23.99 | 2 |