Maison > base de données > tutoriel mysql > le corps du texte

Comment renommer la clé JSON dans SQL Server (T-SQL) ?

藏色散人
Libérer: 2019-04-03 13:52:10
original
2682 Les gens l'ont consulté

Si vous avez utilisé la fonction JSON_MODIFY() pour modifier des documents JSON dans SQL Server, vous êtes peut-être habitué à modifier la partie key/value de l'attribut value. Mais saviez-vous que vous pouvez également modifier la partie key

Comment renommer la clé JSON dans SQL Server (T-SQL) ?

L'astuce pour ce faire est de copier la valeur dans une nouvelle clé, puis de supprimer l'ancienne clé.

Voici un exemple de base de ce que je veux dire.

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Name":"Homer"}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),
  '$.Name',
  NULL
 )
-- Print the new JSON
PRINT @data
Copier après la connexion

Résultat :

{"Name":"Homer"}
{"Handle":"Homer"}
Copier après la connexion

Cela imprimera la paire clé/valeur d'origine, puis la nouvelle paire clé/valeur.

Bien que nous puissions dire que nous avons "renommé" la clé, en réalité, nous venons de créer une nouvelle clé, de copier la valeur existante sur cette nouvelle clé, puis de définir l'ancienne clé sur NULL pour la supprimer.

Dans cet exemple, nous utilisons la fonction JSON_VALUE() pour extraire la valeur.

Valeurs numériques

Des précautions doivent être prises lors de la copie de données vers une nouvelle clé. Par défaut, SQL Server le met entre guillemets doubles. Cela peut être ou non ce que vous souhaitez.

Cependant, si vous copiez une valeur numérique, vous souhaiterez probablement qu'elle reste une valeur numérique (c'est-à-dire sans guillemets doubles). Dans ce cas, il doit être converti en un type de données numérique à l'aide de la fonction CAST(). Voici un exemple :

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents":768}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Population', CAST(JSON_VALUE(@data,'$.Residents') AS int)),
  '$.Residents',
  NULL
 )
-- Print the new JSON
PRINT @data
Copier après la connexion

Résultat :

{"Residents":768}
{"Population":768}
Copier après la connexion

Le résultat est donc un nombre.

Si nous supprimons la fonction CAST() de cet exemple, nous obtenons le résultat :

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Residents": 768}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Population', JSON_VALUE(@data,'$.Residents')),
  '$.Residents',
  NULL
 )
-- Print the new JSON
PRINT @data
Copier après la connexion

Le résultat : Dans ce cas, nous avons non seulement renommé les clés, mais également modifié les Type de données (JSON) de numérique à chaîne.

{"Residents": 768}
{"Population":"768"}
Copier après la connexion
Notez

que JSON ne fait pas de distinction entre les différents types de nombres. Il n’a qu’un seul type numérique : le nombre.

clé clé et espace

Dans cet exemple, j'ai renommé une clé existante en une nouvelle clé qui contient des espaces (elle se compose de deux mots séparés par des espaces).
Étant donné que la nouvelle clé contient des espaces, je dois l'entourer de guillemets doubles. Si vous ne le faites pas, des erreurs se produiront.

Résultat :

-- Declare a variable and assign some JSON to it
DECLARE @data NVARCHAR(50)='{"Population":68}'

-- Print the current JSON
PRINT @data

-- Rename the key (by copying the value to a new key, then deleting the old one)
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$."Average IQ"', CAST(JSON_VALUE(@data,'$.Population') AS int)),
  '$.Population',
  NULL
 )
-- Print the new JSON
PRINT @data
Copier après la connexion


Propriétés imbriquées

{"Population":68}
{"Average IQ":68}
Copier après la connexion

Si les propriétés sont imbriquées, alors Pas de problème. Utilisez simplement la notation par points pour y faire référence.

Résultat :

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
PRINT @data
SET @data=
  JSON_MODIFY(
    JSON_MODIFY(@data,'$.Suspect.Qualifications', JSON_QUERY(@data,'$.Suspect.Hobbies')),
   '$.Suspect.Hobbies',
   NULL
  )
PRINT @data
Copier après la connexion

Vous remarquerez peut-être également que cet exemple utilise la fonction
pour extraire la valeur, plutôt que l'exemple précédent Utiliser

.
{ 
"Suspect": { 
"Name": "Homer Simpson", 
"Hobbies": ["Eating", "Sleeping", "Base Jumping"] 
}
}
{ 
"Suspect": { 
"Name": "Homer Simpson" 
,"Qualifications":["Eating", "Sleeping", "Base Jumping"]}
}
Copier après la connexion

C'est parce que dans ce cas, nous extrayons un tableau, et JSON_QUERY() ne peut pas extraire l'intégralité du tableau (il ne peut extraire que les valeurs scalaires du tableau). En revanche, la fonction JSON_VALUE() extrait les objets et les tableaux, mais pas les valeurs scalaires.

Recommandations associées : "JSON_VALUE()Tutoriel SQLJSON_QUERY()" "

Tutoriel MySQL

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal