sql >> Database >  >> RDS >> Sqlserver

JSON_MODIFY() Voorbeelden in SQL Server (T-SQL)

In SQL Server kunt u de T-SQL JSON_MODIFY() gebruiken functie om de waarde van een eigenschap in een JSON-tekenreeks te wijzigen. De functie retourneert de bijgewerkte JSON-tekenreeks.

Syntaxis

De syntaxis gaat als volgt:

JSON_MODIFY ( expression , path , newValue )

Waar expression is de JSON-tekenreeksexpressie, path is het pad naar de eigenschap die u wilt bijwerken, en newValue is de nieuwe waarde die op die eigenschap moet worden toegepast.

Voorbeeld  1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

In dit voorbeeld:

  • {"Name": "Homer"} is de originele JSON-tekenreeks
  • $.Name is het pad (dit begint met $. gevolgd door het pad naar de eigenschap die we willen bijwerken).
  • Bart is de nieuwe waarde die we willen toewijzen aan Name (d.w.z. om de huidige waarde te vervangen)

Voorbeeld 2 – Retourneer de originele en gewijzigde JSON

Merk op dat JSON_MODIFY() wijzigt de originele JSON niet. Er wordt een kopie gemaakt, vervolgens wordt de kopie gewijzigd en geretourneerd.

Hier is een voorbeeld om dit aan te tonen:

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

Resultaat:

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

Voorbeeld 3 – Geneste eigenschappen

Het pad kan puntnotatie gebruiken om te verwijzen naar geneste eigenschappen. Hier is een voorbeeld.

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

Resultaat:

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

Dus we kunnen zien dat de stad is veranderd van Dunedin naar Timaru .

Voorbeeld 4 – Waarden in een array bijwerken

U kunt ook waarden binnen een array bijwerken. In dit voorbeeld werken we een waarde bij in de 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';

Resultaat:

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

Aangezien arrays op nul gebaseerde nummering gebruiken, werken we het derde item bij door te verwijzen naar Hobbies[2] .

Voorbeeld 5 – Een waarde toevoegen aan een array

In dit voorbeeld voegen we een waarde toe aan de Hobbies reeks. Dit doen we door append . toe te voegen aan het begin van het padargument.

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

Resultaat:

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

Voorbeeld 6 – Een hele array bijwerken

In dit voorbeeld werk ik de hele array bij.

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

Resultaat:

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

Merk op dat in dit voorbeeld het derde argument wordt doorgegeven aan de JSON_QUERY() functie. Als ik dit niet had gedaan, zou SQL Server zijn ontsnapt aan de dubbele aanhalingstekens en vierkante haken met behulp van de backslash (\ ) teken (en daardoor de array in de war sturen). Het zou dit hebben gedaan omdat het niet zou weten of de bijgewerkte waarde een echte array was, of een letterlijke tekenreeks.

Dus om dit te omzeilen, kunnen we JSON_QUERY() . gebruiken . Deze functie retourneert geldige JSON en SQL Server gaat er dan vanuit dat de nieuwe waarde een array is.

Dit is wat er zou zijn gebeurd als we niet hadden gedaan gebruikte 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';

Resultaat:

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

Dus SQL Server is ontsnapt aan de vierkante haken en dubbele aanhalingstekens.

Voorbeeld 7 – Een heel object bijwerken

Hier is een voorbeeld van het bijwerken van een heel object.

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

Resultaat:

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

Nogmaals, als we JSON_QUERY() . niet hadden gebruikt , zouden we een escape-tekenreeks hebben ontvangen:

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

Resultaat:

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

Voorbeeld 8 – De naam van een toets wijzigen

U bent niet alleen beperkt tot het bijwerken van de waarde van een eigenschap, u kunt ook de sleutel ervan hernoemen. Hier is een voorbeeld.

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

Resultaat:

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

Hier nemen we de waarde van de bestaande eigenschap en wijzen deze toe aan een nieuw sleutel/waarde-paar. Vervolgens stellen we de waarde van de originele sleutel in op NULL (waardoor het automatisch wordt verwijderd).

Voor meer voorbeelden van het hernoemen van een sleutel, zie Een JSON-sleutel hernoemen in SQL Server.


  1. Wat is het verschil tussen =null en IS NULL?

  2. Is er een ernstige prestatiehit voor het gebruik van buitenlandse sleutels in SQL Server?

  3. Migreren van Maxscale naar de ProxySQL Load Balancer

  4. Verbinding maken met MySQL met behulp van Python