Heim  >  Artikel  >  Datenbank  >  Wie benenne ich einen JSON-Schlüssel in SQL Server (T-SQL) um?

Wie benenne ich einen JSON-Schlüssel in SQL Server (T-SQL) um?

藏色散人
藏色散人Original
2019-04-03 13:52:102679Durchsuche

Wenn Sie die Funktion JSON_MODIFY() zum Ändern von JSON-Dokumenten in SQL Server verwendet haben, sind Sie möglicherweise daran gewöhnt, den Teil key/value des Attributs value zu ändern. Aber wussten Sie, dass Sie den Teil key auch ändern können?

Wie benenne ich einen JSON-Schlüssel in SQL Server (T-SQL) um?

Der Trick dabei besteht darin, den Wert in einen neuen Schlüssel zu kopieren und dann den alten Schlüssel zu löschen.

Hier ist ein einfaches Beispiel dafür, was ich meine.

-- 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

Ergebnis:

{"Name":"Homer"}
{"Handle":"Homer"}

Dadurch wird das ursprüngliche Schlüssel/Wert-Paar und dann das neue Schlüssel/Wert-Paar ausgedruckt.

Während wir sagen können, dass wir den Schlüssel „umbenannt“ haben, haben wir in Wirklichkeit einfach einen neuen Schlüssel erstellt, den vorhandenen Wert in diesen neuen Schlüssel kopiert und dann den alten Schlüssel auf NULL gesetzt, um ihn zu löschen.

In diesem Beispiel verwenden wir die Funktion JSON_VALUE(), um den Wert zu extrahieren.

Numerische Werte

Beim Kopieren von Daten auf einen neuen Schlüssel ist Vorsicht geboten. Standardmäßig schließt SQL Server es in doppelte Anführungszeichen ein. Dies kann das sein, was Sie wollen oder auch nicht.

Wenn Sie jedoch einen numerischen Wert kopieren, möchten Sie wahrscheinlich, dass es sich immer noch um einen numerischen Wert handelt (d. h. ohne doppelte Anführungszeichen). In diesem Fall muss es mit der Funktion CAST() in einen numerischen Datentyp konvertiert werden. Hier ist ein Beispiel:

-- 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

Ergebnis:

{"Residents":768}
{"Population":768}

Das Ergebnis ist also eine Zahl.

Wenn wir die Funktion CAST() aus diesem Beispiel entfernen, erhalten wir das Ergebnis:

-- 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

Das Ergebnis:

{"Residents": 768}
{"Population":"768"}

In diesem Fall also nicht Wir haben nicht nur die Schlüssel umbenannt, sondern auch den (JSON)-Datentyp von „numerisch“ in „string“ geändert.

Beachten Sie , dass JSON nicht zwischen verschiedenen Zahlentypen unterscheidet. Es gibt nur einen numerischen Typ: Zahl.

Taste Taste und Leerzeichen

In diesem Beispiel habe ich einen vorhandenen Schlüssel in einen neuen Schlüssel umbenannt, der Leerzeichen enthält (er besteht aus zwei Wörtern). durch Leerzeichen getrennt).

Da der neue Schlüssel Leerzeichen enthält, muss ich den Schlüssel in doppelte Anführungszeichen setzen. Wenn Sie dies nicht tun, treten Fehler auf.

-- 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

Ergebnis:

{"Population":68}
{"Average IQ":68}

Verschachtelte Eigenschaften

Kein Problem, wenn die Eigenschaften verschachtelt sind. Verwenden Sie einfach die Punktnotation, um darauf zu verweisen.

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

Ergebnis:

{ 
"Suspect": { 
"Name": "Homer Simpson", 
"Hobbies": ["Eating", "Sleeping", "Base Jumping"] 
}
}
{ 
"Suspect": { 
"Name": "Homer Simpson" 
,"Qualifications":["Eating", "Sleeping", "Base Jumping"]}
}

Möglicherweise fällt Ihnen auch auf, dass in diesem Beispiel die Funktion JSON_QUERY() zum Extrahieren des Werts verwendet wird, anstatt JSON_VALUE() wie im vorherigen Beispiel .

Das liegt daran, dass wir in diesem Fall ein Array extrahieren und JSON_VALUE() nicht das gesamte Array extrahieren kann (es kann nur Skalarwerte aus dem Array extrahieren). Andererseits extrahiert die Funktion JSON_QUERY() Objekte und Arrays, jedoch keine Skalarwerte.

Verwandte Empfehlungen: „SQL-Tutorial“ „MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonWie benenne ich einen JSON-Schlüssel in SQL Server (T-SQL) um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn