JSON (J avaS cript O bject N otation) is een zeer populaire standaard voor het uitwisselen van gegevens, speciaal in REST API. Vrijwel alle moderne websites, android of iOS app gebruiken dit voor het uitwisselen van data met server. Vanaf SQL Server 2016 breidt Microsoft zijn ondersteuning voor JSON uit via een aantal ingebouwde functies. Op deze manier ondersteunt SQL Server NOSQL-functies in traditionele relationele databases. Laten we het onderzoeken:
- ISJSON – onderzoekt een string of het een geldige JSON is of niet
- JSON_VALUE – haalt waarde op uit een JSON-tekenreeks
- JSON_QUERY – haalt object of array op uit een JSON-string
- JSON_MODIFY – retourneert de bijgewerkte JSON-tekenreeks
- OPENJSON – parseert JSON-tekst en retourneert objecten en eigenschappen van de JSON-invoer als rijen en kolommen
- VOOR JSON-clausule – exporteert SQL-gegevens naar JSON-indeling
ISJSON-functie
DECLARE @json NVARCHAR(MAX); SET @json = N'{ "info":[ { "id":"1", "name":"Robert Aragon", "ssn":"489-36-8350", "credit_card":[ "4929-3813-3266-4295", "5370-4638-8881-3020" ], "address":{ "town":"Avon", "area":"New York", "zipcode":"76148" } }, { "id":"2", "name":"Thomas Conley", "ssn":"690-05-5315", "credit_card":[ "5299-1561-5689-1938" ], "address":{ "town":"Jackson Street", "area":"New York", "zipcode":"80233" } }, { "id":"3", "name":"Susan Davis", "ssn":"421-37-1396", "credit_card":[ "5293-8502-0071-3058" ], "address":{ "town":"Rock Beach", "area":"Los angeles", "zipcode":"900341" } }, { "id":"4", "name":"Christopher Diaz", "ssn":"458-02-6124", "credit_card":[ "5548-0246-6336-5664" ], "address":{ "town":"Small town", "area":"Wasshington", "zipcode":"63126" } }, { "id":"5", "name":"Rick Edwards", "ssn":"612-20-6832", "credit_card":[ "4539-5385-7425-5825" ], "address":{ "town":"Free Town", "area":"Utah", "zipcode":"97222" } }, { "id":"6", "name":"Victor Faulkner", "ssn":"300-62-3266", "credit_card":[ "4916-9766-5240-6147", "4532-4220-6922-9909", "5218-0144-2703-9266" ], "address":{ "town":"Dakota", "area":"North Dakota", "zipcode":"92104" } } ] } '; SELECT ISJSON(@json);
Uitvoer
1 -- 1 if it is a valid JSON otherwise 0
JSON_VALUE Functie
Deze functie wordt gebruikt om een scalaire waarde op te halen uit een JSON-tekenreeks. De syntaxis is
JSON_VALUE(expression, path)
uitdrukking is de naam van een variabele of een kolom die JSON-tekst bevat en de eigenschap is die moet worden geëxtraheerd. Als u bijvoorbeeld de onderstaande instructie uitvoert op de bovenstaande JSON-tekenreeks, krijgt u onderstaande uitvoer:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Uitvoer
5548-0246-6336-5664
De functie JSON_VALUE retourneert een enkele tekstwaarde van het type nvarchar(4000) . Het retourneert null als het opgegeven pad niet wordt gevonden in het JSON-object of als de waarde hoger is dan nvarchar (4000). Met behulp van ‘strikt ' sleutelwoord voor het pad zal de fout genereren als het opgegeven pad niet beschikbaar is in het JSON-object.
JSON_QUERY Functie
De JSON_QUERY(expression [,path]) functie neemt de naam van een variabele of een kolom die JSON-tekst bevat en het JSON-pad dat het object of de array specificeert dat moet worden geëxtraheerd als zijn argumenten.
Uitvoer
Het retourneert een JSON-fragment van het type nvarchar(max) . Net als de JSON_VALUE-functie retourneert null als de opgegeven waarde geen object of array is. Het gebruik van een 'strikt' zoekwoord zal de fout veroorzaken.
JSON_MODIFY Functie
Het werkt de waarde van een eigenschap in een JSON-tekenreeks bij en retourneert de bijgewerkte JSON-tekenreeks. Het neemt expressie, pad en nieuw als argumenten. Met behulp van deze functie kunnen we onderstaande bewerking uitvoeren op een JSON-string:
- Bijwerken
- Invoegen
- Verwijderen
- Toevoegen
1. Bijwerken
Werkt de waarde van een bepaald pad bij.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Uitgang
2. Invoegen
Er wordt een nieuwe waarde toegevoegd in de JSON-tekenreeks als het kenmerk in het opgegeven pad niet bestaat. Anders wordt de bestaande waarde bijgewerkt volgens het bovenstaande voorbeeld. Het nieuwe attribuut wordt aan het einde van de JSON toegevoegd.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Uitgang
3. Verwijderen
Als u de NULL-waarde in het pad plaatst, wordt deze gewoon verwijderd.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Uitgang
4. Toevoegen
Nieuw element kan worden toegevoegd in een array zoals hieronder:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Uitgang
OPENJSON-functie
Dit is een functie met tabelwaarde die JSON-tekst parseert en objecten en eigenschappen van de JSON-invoer als rijen en kolommen retourneert.
DECLARE @json NVARCHAR(MAX); SET @json = N'{"id":"1", "name": "Robert Aragon", "ssn": "489-36-8350", "credit_card":["4929-3813-3266-4295","5370-4638-8881-3020"], "address": {"town": "Avon", "area": "New York", "zipcode": "76148"}}'; SELECT * FROM OpenJson(@json) with ( id int '$.id', name varchar(50) '$.name', ssn varchar(50) '$.ssn', [credit_card] nvarchar(MAX) AS JSON, [address] nvarchar(MAX) AS JSON )
Uitvoer
VOOR JSON-clausule
Deze clausule wordt veel gebruikt met TSQL voor het exporteren van SQL-tabelgegevens naar JSON-indeling. Het heeft twee varianten:
- AUTO – Standaard JSON-uitvoer wordt gegenereerd met de AUTO-optie.
- PATH - De structuur van JSON kan worden gewijzigd door de kolomnaam of aliassen met behulp van de PATH-optie
IF OBJECT_ID('Test1', 'U') IS NOT NULL DROP TABLE Test1; GO -- Create the table CREATE TABLE Test1( pk_id int not null identity(1,1), name varchar(10) default ('Mehedi') ) GO -- Populate with 3 sample data INSERT INTO Test1 default values GO 2 IF OBJECT_ID('Test2', 'U') IS NOT NULL DROP TABLE Test2; GO -- Create the table CREATE TABLE Test2( pk_id int not null identity(1,1), area varchar(10) default ('Dhanmondi'), city varchar(10) default ('Dhaka') ) GO -- Populate with 3 sample data INSERT INTO Test2 default values GO 1 -- Example of AUTO SELECT A.pk_id, A.name, (SELECT pk_id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON AUTO -- Example of PATH SELECT A.pk_id, A.name, (SELECT pk_id as id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON PATH , ROOT ('EmployeeInfo') GO
Uitvoer
Conclusie
Dit gaat allemaal over de JSON in SQL Server. Veel plezier met TSQLing!
Dit artikel is afkomstig van mijn blog.