sql >> Database >  >> RDS >> Mysql

JSON_MERGE_PATCH() - Voer een RFC 7396-compatibele samenvoeging van JSON-documenten uit in MySQL

In MySQL, de JSON_MERGE_PATCH() functie voert een RFC 7396-compatibele samenvoeging uit van twee of meer JSON-documenten, zonder dat leden dubbele sleutels behouden.

U levert de JSON-documenten als argumenten.

Syntaxis

De syntaxis gaat als volgt:

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)

Waar json_doc zijn de JSON-documenten die moeten worden samengevoegd. Als een van de documenten ongeldig is, wordt er een fout gegenereerd.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

SELECT JSON_MERGE_PATCH('{"Name": "Homer"}', '{"Age": 39}') Result;

Resultaat:

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

Dus in dit voorbeeld hebben we twee afzonderlijke objecten samengevoegd tot één object.

Voorbeeld 2 – Dubbele sleutels

Zoals vermeld, bewaart deze functie geen leden met dubbele sleutels. Voorbeeld:

SELECT 
  JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;

Resultaat:

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

Dus in dit geval heeft Bart gewonnen.

Als u leden met dubbele sleutels wilt behouden, gebruikt u de JSON_MERGE_PRESERVE() in plaats daarvan functioneren. Het gebruik van die functie voor dit voorbeeld zou Name . veranderen in een array met zowel Bartholomew en Bart . Zoals dit:

SELECT 
  JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;

Resultaat:

+-----------------------------------+
| Result                            |
+-----------------------------------+
| {"Name": ["Bartholomew", "Bart"]} |
+-----------------------------------+

Voorbeeld 3 – Meerdere leden

Hier is nog een voorbeeld, maar met een extra lid in het object:

SELECT 
  JSON_MERGE_PATCH('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;

Resultaat:

+-----------------------------+
| Result                      |
+-----------------------------+
| {"Age": 10, "Name": "Bart"} |
+-----------------------------+

Dus Bart wint nog steeds, en hij is samengevoegd met de andere leden van het eerste object.

Dit werkt natuurlijk ook andersom:het resultaat is hetzelfde als we het extra lid aan het tweede object toevoegen.

SELECT 
  JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;

Resultaat:

+-----------------------------+
| Result                      |
+-----------------------------+
| {"Age": 10, "Name": "Bart"} |
+-----------------------------+

Voorbeeld 4 – Meer documenten

U bent niet beperkt tot het samenvoegen van slechts twee documenten. U kunt er zoveel samenvoegen als nodig is. Hier is een voorbeeld van het samenvoegen van drie objecten.

SELECT 
  JSON_MERGE_PATCH('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;

Resultaat:

+-----------------------------------------------------+
| Result                                              |
+-----------------------------------------------------+
| {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} |
+-----------------------------------------------------+

Voorbeeld 5 – Arrays

Als u twee arrays met dezelfde naam samenvoegt, wordt er slechts één bewaard:

SELECT 
  JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;

Resultaat:

+--------------------------------+
| Result                         |
+--------------------------------+
| {"Hobbies": ["Skateboarding"]} |
+--------------------------------+

Nogmaals, je kunt JSON_MERGE_PRESERVE() . gebruiken als u beide arrays wilt behouden. Dus het vorige voorbeeld kan worden herschreven tot het volgende:

SELECT 
  JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;

Resultaat:

+-------------------------------------------------------+
| Result                                                |
+-------------------------------------------------------+
| {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} |
+-------------------------------------------------------+

Voorbeeld 6 – Een groter JSON-document

Hier is een voorbeeld dat (iets) grotere JSON-documenten samenvoegt.

SET @data1 = '{  
    "Suspect": {    
       "Name": "Bart", 
       "Hobbies": ["Skateboarding", "Mischief"]  
    }
 }',
 @data2 = '{  
    "Suspect": {    
       "Age": 10, 
       "Parents": ["Marge", "Homer"]  
    }
 }';
SELECT JSON_MERGE_PATCH(@data1, @data2) Result;

Resultaat:

+-------------------------------------------------------------------------------------------------------------------+
| Result                                                                                                            |
+-------------------------------------------------------------------------------------------------------------------+
| {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief"], "Parents": ["Marge", "Homer"]}} |
+-------------------------------------------------------------------------------------------------------------------+

Voor de exacte regels voor hoe deze functie samenvoegingen uitvoert, zie de MySQL-documentatie.


  1. SQLiteDiskIOException:foutcode 10:schijf-I/O-fout wordt opnieuw ingesteld op ICS en Samsung Nexus op DROP TABLE

  2. Hoe EXP() werkt in MariaDB

  3. Android sqlite db.query leidt naar CursorIndexOutOfBoundsException

  4. Oracle Insert Select met bestellen door