sql >> Database >  >> RDS >> Mysql

JSON_REPLACE() – Vervang waarden in een JSON-document in MySQL

In MySQL is de JSON_REPLACE() functie vervangt waarden in een JSON-document en retourneert het resultaat.

U geeft het JSON-document op als het eerste argument, gevolgd door het pad om gegevens te vervangen bij, gevolgd door de waarde waarmee de bestaande waarde moet worden vervangen.

Indien nodig kunt u op meerdere plaatsen in het document gegevens vervangen. Om dit te doen, geeft u indien nodig meerdere pad/waarde-paren op.

Syntaxis

De syntaxis gaat als volgt:

JSON_REPLACE(json_doc, path, val[, path, val] ...)

Waar json_doc is het JSON-document, path is het pad om de gegevens te vervangen op, en val is de nieuwe waarde om de bestaande waarde te vervangen.

De pad/waarde-paren worden van links naar rechts geëvalueerd. Het document dat wordt geproduceerd door een paar te evalueren, wordt de nieuwe waarde waartegen het volgende paar wordt geëvalueerd.

Als het pad/waarde-paar niet bestaat in het JSON-document, wordt het genegeerd en heeft het geen effect.

Het eerste argument moet een geldig JSON-document zijn, anders treedt er een fout op.

Ook het path argument moet een geldige paduitdrukking zijn en mag geen * . bevatten of ** wildcard, anders treedt er een fout op.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

SELECT JSON_REPLACE('{"a": 1, "b": 2, "c": 3}', '$.b', 9) AS 'Result';

Resultaat:

+--------------------------+
| Result                   |
+--------------------------+
| {"a": 1, "b": 9, "c": 3} |
+--------------------------+

In dit geval hebben we b . vervangen 's waarde met 9 . Dit komt omdat we $.b . hebben gespecificeerd als het tweede argument, en 9 als de derde.

Hier is nog een voorbeeld:

SELECT 
  JSON_REPLACE('{"Name": "Bart", "Age": 10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';

Resultaat:

+----------------------------------------+
| Result                                 |
+----------------------------------------+
| {"Age": 10, "Name": "Nelson - Ha Ha!"} |
+----------------------------------------+

Voorbeeld 2 – Niet-bestaand pad

Als u een pad opgeeft dat niet bestaat, wordt er niets verwijderd. Het originele JSON-document wordt zonder wijziging geretourneerd.

SELECT 
  JSON_REPLACE('{"Name": "Homer", "Age": 39}', '$.Gender', 'Male') AS 'Result';

Resultaat:

+------------------------------+
| Result                       |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+

Voorbeeld 3 – Arrays

Hier is een voorbeeld waarin een array wordt gebruikt.

SELECT JSON_REPLACE('[1, 2, 3]', '$[0]', 9) AS 'Result';

Resultaat:

+-----------+
| Result    |
+-----------+
| [9, 2, 3] |
+-----------+

Arrays gebruiken op nul gebaseerde nummering, dus in dit geval wordt het eerste element vervangen.

Hier is nog een matrixvoorbeeld. Deze keer vervangen we een waarde in een geneste array.

SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Result';

Resultaat:

+-------------------+
| Result            |
+-------------------+
| [1, 2, [3, 9, 5]] |
+-------------------+

Voorbeeld 4 – Meerdere paden

U kunt meer dan één pad specificeren om gegevens op meerdere plaatsen in het JSON-document te vervangen.

Basis voorbeeld:

SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Result';

Resultaat:

+------------------+
| Result           |
+------------------+
| [1, 9, 3, 22, 5] |
+------------------+

Voorbeeld 5 – Een groter JSON-document

Hier is een voorbeeld met een (iets) groter JSON-document.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Age": 39,
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_REPLACE(@data, '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';

Resultaat:

+--------------------------------------------------------------------------------+
| Result                                                                         |
+--------------------------------------------------------------------------------+
| {"Person": {"Age": 10, "Name": "Bart", "Hobbies": ["Eating", "Base Jumping"]}} |
+--------------------------------------------------------------------------------+

  1. Een beperking van een externe sleutel inschakelen in SQL Server (T-SQL-voorbeelden)

  2. PostgreSQL gebruikt geen gedeeltelijke index

  3. Een Enum-veld wijzigen met Alembic

  4. Waarom ongeldige conversie aangevraagd FOUTCODE:17132?