Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_MERGE_PRESERVE() – Unisci più documenti JSON in MySQL

In MySQL, il JSON_MERGE_PRESERVE() La funzione unisce due o più documenti JSON e restituisce il risultato.

Fornisci i documenti JSON come argomenti.

Questa funzione è stata aggiunta in MySQL 8.0.3 come sinonimo di JSON_MERGE() , tuttavia, il JSON_MERGE() la funzione è ora deprecata ed è soggetta a rimozione in una versione futura di MySQL.

Sintassi

La sintassi è questa:

JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)

Dove json_doc sono i documenti JSON da unire.

Se uno qualsiasi dei documenti non è valido, viene generato un errore.

Se un argomento è NULL , questa funzione restituisce NULL .

Esempio 1 – Utilizzo di base

Ecco un esempio da dimostrare.

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

Risultato:

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

Quindi, in questo esempio, abbiamo unito due oggetti separati in un unico oggetto.

Questo è esattamente lo stesso risultato che otterremmo se utilizzassimo JSON_MERGE_PATCH() funzione. Tuttavia, se proviamo a unire chiavi duplicate, queste due funzioni produrranno risultati diversi.

Esempio 2:chiavi duplicate

Come suggerisce il nome, il JSON_MERGE_PRESERVE() la funzione conserva i membri con chiavi duplicate (questo è dove differisce da JSON_MERGE_PATCH() funzione).

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

Risultato:

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

Quindi, in questo caso, è stato creato un array e sia Bart che Bartholomew sono stati aggiunti come elementi separati di quell'array.

Questo è in contrasto con JSON_MERGE_PATCH() funzione, che esegue le seguenti operazioni:

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

Risultato:

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

Esempio 3 – Membri multipli

Ecco un altro esempio, ma con un membro aggiuntivo nell'oggetto:

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

Risultato:

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

Funziona anche al contrario:il risultato è lo stesso se aggiungiamo il membro aggiuntivo al secondo oggetto.

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

Risultato:

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

Esempio 4 – Altri documenti

Non sei limitato a unire solo due documenti. Puoi unirne quanti ne desideri. Ecco un esempio di unione di tre oggetti.

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

Risultato:

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

Esempio 5 – Matrici

Ecco un esempio di unione di due array con lo stesso nome:

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

Risultato:

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

Questo è un altro esempio in cui JSON_MERGE_PATCH() restituirebbe un risultato diverso.

Ovviamente, se gli array hanno nomi diversi, finiranno come array separati (ma all'interno dello stesso documento JSON):

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

Risultato:

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

Esempio 6:un documento JSON più grande

Ecco un esempio che unisce documenti JSON (leggermente) più grandi.

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

Risultato:

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

Per le regole esatte su come questa funzione esegue le unioni, vedere la documentazione di MySQL.