W MySQL JSON_MERGE_PRESERVE() funkcja łączy dwa lub więcej dokumentów JSON i zwraca wynik.
Podajesz dokumenty JSON jako argumenty.
Ta funkcja została dodana w MySQL 8.0.3 jako synonim JSON_MERGE() , jednak JSON_MERGE() funkcja jest teraz przestarzała i może zostać usunięta w przyszłej wersji MySQL.
Składnia
Składnia wygląda tak:
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
Gdzie json_doc czy dokumenty JSON mają zostać scalone.
Jeśli którykolwiek z dokumentów jest nieprawidłowy, zgłaszany jest błąd.
Jeśli jakikolwiek argument ma wartość NULL , ta funkcja zwraca NULL .
Przykład 1 – Podstawowe użycie
Oto przykład do zademonstrowania.
SELECT JSON_MERGE_PRESERVE('{"Name": "Homer"}', '{"Age": 39}') Result;
Wynik:
+------------------------------+
| Result |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+
W tym przykładzie połączyliśmy dwa oddzielne obiekty w jeden.
Jest to dokładnie ten sam wynik, który otrzymalibyśmy, gdybyśmy użyli JSON_MERGE_PATCH() funkcjonować. Jeśli jednak spróbujemy połączyć zduplikowane klucze, te dwie funkcje dadzą różne wyniki.
Przykład 2 – Zduplikowane klawisze
Jak sama nazwa wskazuje, JSON_MERGE_PRESERVE() funkcja zachowuje członków ze zduplikowanymi kluczami (tutaj różni się od JSON_MERGE_PATCH() funkcja).
SELECT
JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Wynik:
+-----------------------------------+
| Result |
+-----------------------------------+
| {"Name": ["Bartholomew", "Bart"]} |
+-----------------------------------+
Tak więc w tym przypadku utworzono tablicę i zarówno Bart, jak i Bartholomew zostali dodani jako oddzielne elementy tej tablicy.
Jest to w przeciwieństwie do JSON_MERGE_PATCH() funkcja, która wykonuje następujące czynności:
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Wynik:
+------------------+
| Result |
+------------------+
| {"Name": "Bart"} |
+------------------+
Przykład 3 – Wielu członków
Oto kolejny przykład, ale z dodatkowym elementem w obiekcie:
SELECT
JSON_MERGE_PRESERVE('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;
Wynik:
+----------------------------------------------+
| Result |
+----------------------------------------------+
| {"Age": 10, "Name": ["Bartholomew", "Bart"]} |
+----------------------------------------------+
Działa to również w drugą stronę – wynik jest taki sam, jeśli dodamy dodatkowy element do drugiego obiektu.
SELECT
JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;
Wynik:
+----------------------------------------------+
| Result |
+----------------------------------------------+
| {"Age": 10, "Name": ["Bartholomew", "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_PRESERVE('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;
Wynik:
+-----------------------------------------------------+
| Result |
+-----------------------------------------------------+
| {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} |
+-----------------------------------------------------+
Przykład 5 – Tablice
Oto przykład połączenia dwóch tablic o tej samej nazwie:
SELECT
JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
Wynik:
+-------------------------------------------------------+
| Result |
+-------------------------------------------------------+
| {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} |
+-------------------------------------------------------+
To kolejny przykład, w którym JSON_MERGE_PATCH() zwróci inny wynik.
Oczywiście, jeśli tablice mają różne nazwy, skończą jako oddzielne tablice (ale w tym samym dokumencie JSON):
SELECT
JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}') Result;
Wynik:
+------------------------------------------------------------------+
| Result |
+------------------------------------------------------------------+
| {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} |
+------------------------------------------------------------------+
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"],
"Hobbies": ["Trouble"]
}
}';
SELECT JSON_MERGE_PRESERVE(@data1, @data2) Result;
Wynik:
+------------------------------------------------------------------------------------------------------------------------------+
| Result |
+------------------------------------------------------------------------------------------------------------------------------+
| {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief", "Trouble"], "Parents": ["Marge", "Homer"]}} |
+------------------------------------------------------------------------------------------------------------------------------+
Dokładne zasady wykonywania połączeń przez tę funkcję można znaleźć w dokumentacji MySQL.