JSON (J avaS écriture O objet N otation) est une norme très populaire pour échanger des données spécialement dans l'API REST. Presque tous les sites Web modernes, les applications Android ou iOS l'utilisent pour échanger des données avec le serveur. À partir de SQL Server 2016, Microsoft étend sa prise en charge de JSON grâce à quelques fonctions intégrées. De cette façon, SQL Server prend en charge les fonctionnalités NOSQL dans les bases de données relationnelles traditionnelles. Examinons-le :
- ISJSON :examine une chaîne, qu'elle soit ou non un JSON valide
- JSON_VALUE - récupère la valeur d'une chaîne JSON
- JSON_QUERY :récupère un objet ou un tableau à partir d'une chaîne JSON
- JSON_MODIFY – renvoie la chaîne JSON mise à jour
- OPENJSON :analyse le texte JSON et renvoie les objets et les propriétés de l'entrée JSON sous forme de lignes et de colonnes
- Clause FOR JSON – exporte les données SQL au format JSON
Fonction ISJSON
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);
Sortie
1 -- 1 if it is a valid JSON otherwise 0
Fonction JSON_VALUE
Cette fonction est utilisée pour récupérer une valeur scalaire à partir d'une chaîne JSON. Sa syntaxe est
JSON_VALUE(expression, path)
expression est le nom d'une variable ou d'une colonne qui contient du texte JSON et est la propriété à extraire. Par exemple, l'exécution de l'instruction ci-dessous sur la chaîne JSON ci-dessus donnera la sortie ci-dessous :
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Sortie
5548-0246-6336-5664
La fonction JSON_VALUE renvoie une seule valeur de texte de type nvarchar(4000) . Il renvoie null si le chemin spécifié est introuvable dans l'objet JSON ou si la valeur est au-delà de nvarchar(4000). Utiliser ‘strict ' Le mot-clé avant le chemin génèrera l'erreur si le chemin spécifié n'est pas disponible dans l'objet JSON.
Fonction JSON_QUERY
Le La fonction JSON_QUERY(expression [,path]) prend le nom d'une variable ou d'une colonne qui contient du texte JSON et le chemin JSON qui spécifie l'objet ou le tableau à extraire comme arguments.
Sortie
Il renvoie un fragment JSON de type nvarchar(max) . Comme la fonction JSON_VALUE renvoie null si la valeur spécifiée n'est pas un objet ou un tableau. L'utilisation du mot-clé "strict" génèrera l'erreur.
Fonction JSON_MODIFY
Il met à jour la valeur d'une propriété dans une chaîne JSON et renvoie la chaîne JSON mise à jour. Il prend expression, path et new comme arguments. En utilisant cette fonction, nous pouvons effectuer l'opération ci-dessous sur une chaîne JSON :
- Mettre à jour
- Insérer
- Supprimer
- Ajouter
1. Mettre à jour
Met à jour la valeur d'un chemin donné.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Sortie
2. Insérer
Une nouvelle valeur est ajoutée dans la chaîne JSON si l'attribut dans le chemin fourni n'existe pas. Sinon, il mettra à jour la valeur existante comme dans l'exemple ci-dessus. Le nouvel attribut est ajouté à la fin du JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Sortie
3. Supprimer
Mettre la valeur NULL dans le chemin la supprimera simplement.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Sortie
4. Ajouter
Le nouvel élément peut être ajouté dans un tableau comme ci-dessous :
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Sortie
Fonction OPENJSON
Il s'agit d'une fonction table qui analyse le texte JSON et renvoie les objets et les propriétés de l'entrée JSON sous forme de lignes et de colonnes.
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 )
Sortie
Clause FOR JSON
Cette clause est largement utilisée avec TSQL pour exporter des données de table SQL au format JSON. Il a deux variantes :
- AUTO – La sortie JSON par défaut est générée à l'aide de l'option AUTO.
- PATH - La structure de JSON peut être modifiée par le nom de la colonne ou les alias à l'aide de l'option PATH
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
Sortie
Conclusion
Il s'agit du JSON dans SQL Server. Joyeux TSQL !
Cet article est extrait de mon blog.