sql >> Databasteknik >  >> RDS >> Sqlserver

JSON_MODIFY() Exempel i SQL Server (T-SQL)

I SQL Server kan du använda T-SQL JSON_MODIFY() funktion för att ändra värdet på en egenskap i en JSON-sträng. Funktionen returnerar den uppdaterade JSON-strängen.

Syntax

Syntaxen ser ut så här:

JSON_MODIFY ( expression , path , newValue )

Där expression är JSON-stränguttrycket, path är sökvägen till egenskapen du vill uppdatera och newValue är det nya värdet som ska tillämpas på den egenskapen.

Exempel  1 – Grundläggande användning

Här är ett exempel att visa.

SELECT JSON_MODIFY('{"Name": "Homer"}', '$.Name', 'Bart') AS 'Result';

Resultat:

+------------------+
| Result           |
|------------------|
| {"Name": "Bart"} |
+------------------+

I det här exemplet:

  • {"Name": "Homer"} är den ursprungliga JSON-strängen
  • $.Name är sökvägen (detta börjar med $. följt av sökvägen till egenskapen vi vill uppdatera).
  • Bart är det nya värdet vi vill tilldela Name (dvs för att ersätta det aktuella värdet)

Exempel 2 – Returnera den ursprungliga och modifierade JSON

Observera att JSON_MODIFY() ändrar inte den ursprungliga JSON. Den tar en kopia, ändrar sedan och returnerar kopian.

Här är ett exempel som visar detta:

DECLARE @suspect NVARCHAR(4000)
SET @suspect= '{"Name": "Homer"}'
SELECT 
  @suspect AS 'Original String',
  JSON_MODIFY(@suspect, '$.Name', 'Bart') AS 'Modified String',
  @suspect AS 'Original String';

Resultat:

+-------------------+-------------------+-------------------+
| Original String   | Modified String   | Original String   |
|-------------------+-------------------+-------------------|
| {"Name": "Homer"} | {"Name": "Bart"}  | {"Name": "Homer"} |
+-------------------+-------------------+-------------------+

Exempel 3 – Kapslade egenskaper

Sökvägen kan använda punktnotation för att referera till kapslade egenskaper. Här är ett exempel.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Address.City', 'Timaru') AS 'Modified Array';

Resultat:

+------------------+
| Modified Array   |
|------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Timaru",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }                  |
+------------------+

Så vi kan se att staden har ändrats från Dunedin till Timaru .

Exempel 4 – Uppdatera värden i en array

Du kan också uppdatera värden inom en array. I det här exemplet uppdaterar vi ett värde i Hobbies array.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Hobbies[2]', 'Brain Surgery') AS 'Updated Hobbies';

Resultat:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Brain Surgery"]  
    }
 }                   |
+-------------------+

Eftersom arrayer använder nollbaserad numrering uppdaterar vi den tredje posten genom att referera till Hobbies[2] .

Exempel 5 – Lägg till ett värde till en matris

I det här exemplet lägger vi till ett värde till Hobbies array. Vi gör detta genom att lägga till append i början av sökvägsargumentet.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'append $.Suspect.Hobbies', 'Brain Surgery') AS 'Updated Hobbies';

Resultat:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping","Brain Surgery"]  
    }
 }                   |
+-------------------+

Exempel 6 – Uppdatera en hel array

I det här exemplet uppdaterar jag hela arrayen.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Hobbies', JSON_QUERY('["Chess", "Brain Surgery"]')) AS 'Updated Hobbies';

Resultat:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Chess", "Brain Surgery"]  
    }
 }                   |
+-------------------+

Observera att i det här exemplet skickas det tredje argumentet till JSON_QUERY() fungera. Om jag inte hade gjort det här, skulle SQL Server ha undkommit dubbla citattecken och hakparenteser med omvänt snedstreck (\ ) tecken (och därför förstör arrayen). Det skulle ha gjort detta eftersom det inte skulle ha vetat om det uppdaterade värdet var en faktisk array eller en bokstavlig sträng.

Så för att komma runt detta kan vi använda JSON_QUERY() . Den här funktionen returnerar giltig JSON och SQL Server kommer då att anta att det nya värdet är en array.

Här är vad som skulle ha hänt om vi inte hade gjort det använde JSON_QUERY() :

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect.Hobbies', '["Chess", "Brain Surgery"]') AS 'Updated Hobbies';

Resultat:

+-------------------+
| Updated Hobbies   |
|-------------------|
| {  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Address": {    
         "City": "Dunedin",  
         "Region": "Otago",  
         "Country": "New Zealand"  
       },  
       "Hobbies": "[\"Chess\", \"Brain Surgery\"]"  
    }
 }                   |
+-------------------+

Så SQL Server har undgått hakparenteser och citattecken.

Exempel 7 – Uppdatera ett helt objekt

Här är ett exempel på uppdatering av ett helt objekt.

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect', JSON_QUERY('{"Name": "Peter Griffin", "Hobbies": "None"}')) AS 'Updated Object';

Resultat:

+------------------+
| Updated Object   |
|------------------|
| {  
    "Suspect": {"Name": "Peter Griffin", "Hobbies": "None"}
 }                  |
+------------------+

Återigen, om vi inte hade använt JSON_QUERY() , skulle vi ha fått en escaped sträng:

DECLARE @data NVARCHAR(4000)
SET @data=N'{  
    "Suspect": {    
       "Name": "Homer Simpson",  
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }'
 SELECT 
   JSON_MODIFY(@data,'$.Suspect', '{"Name": "Peter Griffin", "Hobbies": "None"}') AS 'Updated Object';

Resultat:

+------------------+
| Updated Object   |
|------------------|
| {  
    "Suspect": "{\"Name\": \"Peter Griffin\", \"Hobbies\": \"None\"}"
 }                  |
+------------------+

Exempel 8 – Byt namn på en nyckel

Du är inte bara begränsad till att uppdatera en fastighets värde, du kan också byta namn på dess nyckel. Här är ett exempel.

DECLARE @data NVARCHAR(50)='{"Name":"Homer"}'
PRINT @data

-- Rename the key
SET @data=
 JSON_MODIFY(
  JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')),
  '$.Name',
  NULL
 )
PRINT @data

Resultat:

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

Här tar vi värdet från den befintliga egenskapen och tilldelar det till ett nytt nyckel/värdepar. Vi sätter sedan värdet på den ursprungliga nyckeln till NULL (vilket automatiskt tar bort det).

För fler exempel på att byta namn på en nyckel, se Hur man byter namn på en JSON-nyckel i SQL Server.


  1. Hur ändrar man negativt värde till positivt i Oracle?

  2. Välj en MySQL-databas på Linux via kommandoraden

  3. Hur man visar eller visar verktygsfältet Snabbåtkomst i Word, Excel och PowerPoint

  4. Undvikande enstaka citat i PHP när du infogar i MySQL