Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

JSON dans SQL Server

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 :

  1. Mettre à jour
  2. Insérer
  3. Supprimer
  4. 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.