sql >> Database >  >> RDS >> Mysql

JSON_INSERT() – Waarden invoegen in een JSON-document in MySQL

In MySQL is de JSON_INSERT() functie voegt een waarde in een JSON-document in en retourneert het resultaat.

U geeft het JSON-document op als het eerste argument, gevolgd door het pad waarin moet worden ingevoegd, gevolgd door de waarde die moet worden ingevoegd.

Syntaxis

De syntaxis gaat als volgt:

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

Waar:

  • json_doc is het JSON-document.
  • path is het pad van het element waarvoor de nieuwe waarde moet worden ingevoegd.
  • val is de nieuwe waarde die wordt ingevoegd.

De pad-waardeparen 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.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

Dus het derde argument wordt ingevoegd in de array op het opgegeven pad. In dit geval gebruik ik $.c voor het pad en 3 voor de in te voegen waarde. Dit resulteert in een sleutel/waarde-paar van "c": 3 .

Hier is nog een voorbeeld:

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

Resultaat:

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

Voorbeeld 2 – Een bestaand pad proberen te overschrijven

Een pad-waardepaar voor een bestaand pad in het document wordt genegeerd en overschrijft de bestaande documentwaarde niet.

Dus als we het vorige voorbeeld wijzigen om een ​​waarde in te voegen bij Name (die al bestaat), vindt er geen invoeging plaats:

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

Resultaat:

+-------------------------------------+
| Result                              |
+-------------------------------------+
| {"Name": "Homer", "Gender": "Male"} |
+-------------------------------------+

Voorbeeld 3 – Arrays

U kunt waarden in een array invoegen door een pad te gebruiken voorbij het einde van de bestaande array. Voorbeeld:

SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Result';

Resultaat:

+--------------+
| Result       |
+--------------+
| [1, 2, 3, 4] |
+--------------+

Als u echter een pad gebruikt dat al in de array bestaat, blijft de array ongewijzigd:

SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';

Resultaat:

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

Als de bestaande waarde geen array is, wordt deze automatisch verpakt als een array en vervolgens uitgebreid met de nieuwe waarde. Voorbeeld:

SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';

Resultaat:

+-----------------------+
| Result                |
+-----------------------+
| [{"a": 1, "b": 2}, 3] |
+-----------------------+

Maar nogmaals, als u een waarde probeert in te voegen op een pad dat al bestaat, blijft het JSON-document ongewijzigd:

SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';

Resultaat:

+------------------+
| Result           |
+------------------+
| {"a": 1, "b": 2} |
+------------------+

Voorbeeld 4 – Een groter JSON-document

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

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';

Resultaat:

+----------------------------------------------------------------------------------+
| Result                                                                           |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
+----------------------------------------------------------------------------------+

Zie ook JSON_ARRAY_INSERT() en JSON_ARRAY_APPEND() als u gegevens in een JSON-array moet invoegen of toevoegen.


  1. SQLSTATE [HY000] [2002] Een verbindingspoging is mislukt.. - Bij een poging om verbinding te maken van een lokale naar een externe server

  2. dbms_output.put_line

  3. Selecteer alle maanden binnen een bepaalde periode, inclusief die met 0 waarden

  4. Hoe bekijk je ALLE tekst van een ntext of nvarchar (max) in SSMS?