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