Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_MERGE_PATCH() – Извършете съвместимо с RFC 7396 сливане на JSON документи в MySQL

В MySQL, JSON_MERGE_PATCH() функцията извършва съвместимо с RFC 7396 сливане на два или повече JSON документа, без да запазва членовете, които имат дублиращи се ключове.

Вие предоставяте JSON документите като аргументи.

Синтаксис

Синтаксисът е така:

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

Където json_doc са JSON документите, които ще бъдат обединени. Ако някой от документите е невалиден, възниква грешка.

Пример 1 – Основна употреба

Ето пример за демонстрация.

SELECT JSON_MERGE_PATCH('{"Име":"Homer"}', '{"Възраст":39}') Резултат;

Резултат:

+------------------------------+| Резултат |+------------------------------+| {"Възраст":39, "Име":"Омир"} |+------------------------------+ 

Така че в този пример обединихме два отделни обекта в един обект.

Пример 2 – Дублирани ключове

Както споменахме, тази функция не запазва членове с дублиращи се ключове. Пример:

SELECT JSON_MERGE_PATCH('{"Име":"Вартоломей"}', '{"Име":"Барт"}') Резултат;

Резултат:

+-----------------+| Резултат |+------------------+| {"Име":"Барт"} |+-----------------+

Така че в този случай Барт спечели.

Ако трябва да запазите членове с дублиращи се ключове, използвайте JSON_MERGE_PRESERVE() функция вместо това. Използването на тази функция за този пример ще превърне Name в масив, съдържащ и двата Bartholomew и Bart . Като това:

SELECT JSON_MERGE_PRESERVE('{"Име":"Вартоломей"}', '{"Име":"Барт"}') Резултат;

Резултат:

+---------------------------------+| Резултат |+----------------------------------+| {"Име":["Вартоломей", "Барт"]} |+-------------------------------- --+

Пример 3 – Множество членове

Ето още един пример, но с допълнителен член в обекта:

SELECT JSON_MERGE_PATCH('{"Име":"Вартоломей", "Възраст":10}', "{"Име":"Барт"}') Резултат;

Резултат:

+----------------------------+| Резултат |+----------------------------+| {"Възраст":10, "Име":"Барт"} |+----------------------------+

Така че Барт все пак печели и той е слят с другите членове на първия обект.

Разбира се, това работи и обратното – резултатът е същият, ако добавим допълнителния член към втория обект.

SELECT JSON_MERGE_PATCH('{"Име":"Бартоломей"}', '{"Име":"Барт", "Възраст":10}') Резултат;

Резултат:

+----------------------------+| Резултат |+----------------------------+| {"Възраст":10, "Име":"Барт"} |+----------------------------+

Пример 4 – Още документи

Не сте ограничени до сливане само на два документа. Можете да обедините колкото е необходимо. Ето пример за обединяване на три обекта.

SELECT JSON_MERGE_PATCH('{"Име":"Барт"}', '{"Възраст":10}', '{"Цвят на косата":"Жълт"}') Резултат;

Резултат:

+------------------------------------------------------- -------+| Резултат |+-------------------------------------------------------- ------+| {"Възраст":10, "Име":"Барт", "Цвят на косата":"Жълт"} |+------------------------ -----------------------------+

Пример 5 – Масиви

Сливането на два масива с едно и също име ще доведе до запазване само на един от тях:

SELECT JSON_MERGE_PATCH('{"Хобита":["Trouble", "Mischief"]}', '{"Хобита":["Skateboarding"]}') Резултат;

Резултат:

+--------------------------------+| Резултат |+--------------------------------+| {"Хобита":["Скейтборд"]} |+--------------------------------+

Отново можете да използвате JSON_MERGE_PRESERVE() ако трябва да запазите и двата масива. Така че предишният пример може да бъде пренаписан на следното:

SELECT JSON_MERGE_PRESERVE('{"Хобита":["Trouble", "Mischief"]}', '{"Хобита":["Skateboarding"]}') Резултат;

Резултат:

+------------------------------------------------------- ---------+| Резултат |+-------------------------------------------------------- --------+| {"Хобита":["Проблеми", "Пакости", "Скейтборд"]} |+---------------------------- ----------------------------------+

Пример 6 – По-голям JSON документ

Ето пример, който обединява (малко) по-големи JSON документи.

SET @data1 ='{ "Подозрения":{ "Име":"Барт", "Хобита":["Скейтборд", "Пакости"] } }', @data2 ='{ "Подозрения":{ " Възраст":10, "Родители":["Marge", "Homer"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Резултат;

Резултат:

+------------------------------------------------------- -------------------------------------------------- -------------------+| Резултат |+-------------------------------------------------------- -------------------------------------------------- ------------------+| {"Sospect":{"Age":10, "Name":"Bart", "Hobbites":["Skateboarding", "Mischief"], "Parents":["Marge", "Homer"]}} | +------------------------------------------------ -------------------------------------------------- ----------------+

За точните правила за това как тази функция извършва сливания, вижте документацията на 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. Светият граал на почистването на входа и изхода в php?

  2. MySQL:Предоставяне на **всички** привилегии на база данни

  3. Функция MySQL LOG10() – Връщане на логаритъм на база 10 на стойност

  4. Mysql или/и приоритет?

  5. MySQL заявка намира стойности в низ, разделен със запетая