Mysql
 sql >> Baza danych >  >> RDS >> Mysql

JSON_MERGE_PATCH() — Wykonaj scalanie dokumentów JSON zgodne z RFC 7396 w MySQL

W MySQL JSON_MERGE_PATCH() Funkcja wykonuje zgodne z RFC 7396 scalanie dwóch lub więcej dokumentów JSON, bez zachowywania elementów posiadających zduplikowane klucze.

Podajesz dokumenty JSON jako argumenty.

Składnia

Składnia wygląda tak:

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

Gdzie json_doc to dokumenty JSON, które mają zostać scalone. Jeśli którykolwiek z dokumentów jest nieprawidłowy, zgłaszany jest błąd.

Przykład 1 – Podstawowe użycie

Oto przykład do zademonstrowania.

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

Wynik:

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

W tym przykładzie połączyliśmy dwa oddzielne obiekty w jeden.

Przykład 2 – Zduplikowane klawisze

Jak wspomniano, ta funkcja nie zachowuje członków ze zduplikowanymi kluczami. Przykład:

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

Wynik:

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

Więc w tym przypadku Bart wygrał.

Jeśli chcesz zachować członków ze zduplikowanymi kluczami, użyj JSON_MERGE_PRESERVE() funkcja zamiast. Użycie tej funkcji w tym przykładzie zmieniłoby Name do tablicy zawierającej zarówno Bartholomew i Bart . Tak:

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

Wynik:

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

Przykład 3 – Wielu członków

Oto kolejny przykład, ale z dodatkowym elementem w obiekcie:

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

Wynik:

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

Tak więc Bart nadal wygrywa i został połączony z innymi członkami pierwszego obiektu.

Oczywiście działa to również w drugą stronę – wynik jest taki sam, jeśli dodamy dodatkowy element do drugiego obiektu.

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

Wynik:

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

Przykład 4 – Więcej dokumentów

Nie jesteś ograniczony do połączenia tylko dwóch dokumentów. Możesz połączyć tyle, ile potrzebujesz. Oto przykład scalania trzech obiektów.

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

Wynik:

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

Przykład 5 – Tablice

Połączenie dwóch tablic o tej samej nazwie spowoduje, że zachowana zostanie tylko jedna z nich:

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

Wynik:

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

Ponownie możesz użyć JSON_MERGE_PRESERVE() jeśli chcesz zachować obie tablice. Tak więc poprzedni przykład można przepisać w następujący sposób:

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

Wynik:

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

Przykład 6 – Większy dokument JSON

Oto przykład, który łączy (nieco) większe dokumenty JSON.

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

Wynik:

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

Dokładne zasady wykonywania połączeń przez tę funkcję można znaleźć w dokumentacji MySQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Resetowanie wskaźnika tablicy w wynikach PDO

  2. Jak importować / przywracać tabele MySql za pomocą PHP

  3. Usuń z dwóch tabel w jednym zapytaniu

  4. Jak ustawić domyślną wartość kolumny sygnatury czasowej na bieżący datownik za pomocą migracji Laravel?

  5. Navicat dla MySQL