12.17.4 Функции, изменяющие значения JSON
Функции в этом разделе изменяют значения JSON и возвращают результат.
-
JSON_APPEND(json_doc,path,val[,path,val] ...)Добавляет значения в конец указанных массивов в документе JSON и возвращает результат. Эта функция была переименована в
JSON_ARRAY_APPEND()в MySQL 5.7.9; псевдонимJSON_APPEND()теперь устарел в MySQL 5.7 и удален в MySQL 8.0. -
JSON_ARRAY_APPEND(json_doc,path,val[,path,val] ...)Добавляет значения в конец указанных массивов в документе JSON и возвращает результат. Возвращает
NULL, если какой-либо аргумент являетсяNULL. Возникает ошибка, если аргументjson_docне является корректным документом JSON или любой аргументpathне является корректным выражением пути или содержит подстановочный знак*или**.Пары «путь-значение» оцениваются слева направо. Документ, полученный при оценке одной пары, становится новым значением, относительно которого оценивается следующая пара.
Если путь выбирает скалярное или объектное значение, это значение автоматически оборачивается в массив, и новое значение добавляется в этот массив. Парам, для которых путь не определяет значения в документе JSON, игнорируются.
mysql>
SET @j = '["a", ["b", "c"], "d"]';mysql>SELECT JSON_ARRAY_APPEND(@j, '$[1]', 1);+----------------------------------+ | JSON_ARRAY_APPEND(@j, '$[1]', 1) | +----------------------------------+ | ["a", ["b", "c", 1], "d"] | +----------------------------------+ mysql>SELECT JSON_ARRAY_APPEND(@j, '$[0]', 2);+----------------------------------+ | JSON_ARRAY_APPEND(@j, '$[0]', 2) | +----------------------------------+ | [["a", 2], ["b", "c"], "d"] | +----------------------------------+ mysql>SELECT JSON_ARRAY_APPEND(@j, '$[1][0]', 3);+-------------------------------------+ | JSON_ARRAY_APPEND(@j, '$[1][0]', 3) | +-------------------------------------+ | ["a", [["b", 3], "c"], "d"] | +-------------------------------------+ mysql>SET @j = '{"a": 1, "b": [2, 3], "c": 4}';mysql>SELECT JSON_ARRAY_APPEND(@j, '$.b', 'x');+------------------------------------+ | JSON_ARRAY_APPEND(@j, '$.b', 'x') | +------------------------------------+ | {"a": 1, "b": [2, 3, "x"], "c": 4} | +------------------------------------+ mysql>SELECT JSON_ARRAY_APPEND(@j, '$.c', 'y');+--------------------------------------+ | JSON_ARRAY_APPEND(@j, '$.c', 'y') | +--------------------------------------+ | {"a": 1, "b": [2, 3], "c": [4, "y"]} | +--------------------------------------+ mysql>SET @j = '{"a": 1}';mysql>SELECT JSON_ARRAY_APPEND(@j, '$', 'z');+---------------------------------+ | JSON_ARRAY_APPEND(@j, '$', 'z') | +---------------------------------+ | [{"a": 1}, "z"] | +---------------------------------+ -
JSON_ARRAY_INSERT(json_doc,path,val[,path,val] ...)Обновляет документ JSON, вставляя в массив внутри документа и возвращая изменённый документ. Возвращает
NULL, если какой-либо аргумент являетсяNULL. Возникает ошибка, если аргументjson_docне является корректным документом JSON или любой аргументpathне является корректным выражением пути или содержит подстановочный знак*или**, или не заканчивается идентификатором элемента массива.Пары «путь-значение» оцениваются слева направо. Документ, полученный при оценке одной пары, становится новым значением, относительно которого оценивается следующая пара.
Парам, для которых путь не определяет массив в документе JSON, игнорируются. Если путь определяет элемент массива, соответствующее значение вставляется в позицию этого элемента, смещая все последующие значения вправо. Если путь определяет позицию массива за пределами массива, значение вставляется в конец массива.
mysql>
SET @j = '["a", {"b": [1, 2]}, [3, 4]]';mysql>SELECT JSON_ARRAY_INSERT(@j, '$[1]', 'x');+------------------------------------+ | JSON_ARRAY_INSERT(@j, '$[1]', 'x') | +------------------------------------+ | ["a", "x", {"b": [1, 2]}, [3, 4]] | +------------------------------------+ mysql>SELECT JSON_ARRAY_INSERT(@j, '$[100]', 'x');+--------------------------------------+ | JSON_ARRAY_INSERT(@j, '$[100]', 'x') | +--------------------------------------+ | ["a", {"b": [1, 2]}, [3, 4], "x"] | +--------------------------------------+ mysql>SELECT JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x');+-----------------------------------------+ | JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x') | +-----------------------------------------+ | ["a", {"b": ["x", 1, 2]}, [3, 4]] | +-----------------------------------------+ mysql>SELECT JSON_ARRAY_INSERT(@j, '$[2][1]', 'y');+---------------------------------------+ | JSON_ARRAY_INSERT(@j, '$[2][1]', 'y') | +---------------------------------------+ | ["a", {"b": [1, 2]}, [3, "y", 4]] | +---------------------------------------+ mysql>SELECT JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y');+----------------------------------------------------+ | JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y') | +----------------------------------------------------+ | ["x", "a", {"b": [1, 2]}, [3, 4]] | +----------------------------------------------------+Предыдущие изменения влияют на позиции последующих элементов в массиве, поэтому последующие пути в том же вызове
JSON_ARRAY_INSERT()должны учитывать это. В последнем примере второй путь ничего не вставляет, так как путь больше не соответствует чему-либо после первой вставки. -
JSON_INSERT(json_doc,path,val[,path,val] ...)Вставляет данные в документ JSON и возвращает результат. Возвращает
NULL, если какой-либо аргумент являетсяNULL. Возникает ошибка, если аргументjson_docне является корректным документом JSON или любой аргументpathне является корректным выражением пути или содержит подстановочный знак*или**.Пары «путь-значение» оцениваются слева направо. Документ, полученный при оценке одной пары, становится новым значением, относительно которого оценивается следующая пара.
Пара «путь-значение» для существующего пути в документе игнорируется и не перезаписывает существующее значение документа. Пара «путь-значение» для несуществующего пути в документе добавляет значение в документ, если путь идентифицирует один из следующих типов значений:
Член, отсутствующий в существующем объекте. Член добавляется в объект и связывается с новым значением.
Позиция за пределами существующего массива. Массив расширяется новым значением. Если существующее значение не является массивом, оно автоматически оборачивается в массив, а затем расширяется новым значением.
В противном случае пара «путь-значение» для несуществующего пути в документе игнорируется и не оказывает никакого влияния.
Для сравнения
JSON_INSERT(),JSON_REPLACE()иJSON_SET(), см. обсуждениеJSON_SET().mysql>
SET @j = '{ "a": 1, "b": [2, 3]}';mysql>SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');+----------------------------------------------------+ | JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]') | +----------------------------------------------------+ | {"a": 1, "b": [2, 3], "c": "[true, false]"} | +----------------------------------------------------+Третье и последнее значение в результате — это строка в кавычках, а не массив, как второе (которое не заключено в кавычки в выводе); преобразование значений в тип JSON не выполняется. Чтобы вставить массив как массив, нужно явно выполнить такие преобразования, как показано здесь:
mysql>
SELECT JSON_INSERT(@j, '$.a', 10, '$.c', CAST('[true, false]' AS JSON));+------------------------------------------------------------------+ | JSON_INSERT(@j, '$.a', 10, '$.c', CAST('[true, false]' AS JSON)) | +------------------------------------------------------------------+ | {"a": 1, "b": [2, 3], "c": [true, false]} | +------------------------------------------------------------------+ 1 row in set (0.00 sec) -
JSON_MERGE(json_doc,json_doc[,json_doc] ...)Объединяет два или более документов JSON. Синоним для
JSON_MERGE_PRESERVE(); устарел в MySQL 5.7.22 и может быть удалён в будущей версии.mysql>
SELECT JSON_MERGE('[1, 2]', '[true, false]');+---------------------------------------+ | JSON_MERGE('[1, 2]', '[true, false]') | +---------------------------------------+ | [1, 2, true, false] | +---------------------------------------+ 1 row in set, 1 warning (0.00 sec) mysql>SHOW WARNINGS\G*************************** 1. row *************************** Level: Warning Code: 1287 Message: 'JSON_MERGE' is deprecated and will be removed in a future release. \ Please use JSON_MERGE_PRESERVE/JSON_MERGE_PATCH instead 1 row in set (0.00 sec)Для дополнительных примеров см. запись для
JSON_MERGE_PRESERVE(). -
JSON_MERGE_PATCH(json_doc,json_doc[,json_doc] ...)Выполняет слияние двух или более документов JSON, совместимое с RFC 7396, и возвращает объединённый результат без сохранения членов с дублирующимися ключами. Вызывает ошибку, если хотя бы один из документов, переданных в качестве аргументов этой функции, не является корректным.
ПримечаниеОбъяснение и пример различий между этой функцией и
JSON_MERGE_PRESERVE()см. в JSON_MERGE_PATCH() по сравнению с JSON_MERGE_PRESERVE().JSON_MERGE_PATCH()выполняет слияние следующим образом:Если первый аргумент не является объектом, результат слияния такой же, как если бы пустой объект был объединён со вторым аргументом.
Если второй аргумент не является объектом, результат слияния — второй аргумент.
-
Если оба аргумента являются объектами, результат слияния — объект со следующими членами:
Все члены первого объекта, у которых нет соответствующего члена с тем же ключом во втором объекте.
Все члены второго объекта, у которых нет соответствующего ключа в первом объекте, и чьё значение не является JSON
nullлитералом.Все члены с ключом, существующим как в первом, так и во втором объекте, и чьё значение во втором объекте не является JSON
nullлитералом. Значения этих членов являются результатом рекурсивного слияния значения в первом объекте со значением во втором объекте.
Дополнительную информацию см. в разделе Нормализация, слияние и автоматическое обертывание значений JSON.
mysql>
SELECT JSON_MERGE_PATCH('[1, 2]', '[true, false]');+---------------------------------------------+ | JSON_MERGE_PATCH('[1, 2]', '[true, false]') | +---------------------------------------------+ | [true, false] | +---------------------------------------------+ mysql>SELECT JSON_MERGE_PATCH('{"name": "x"}', '{"id": 47}');+-------------------------------------------------+ | JSON_MERGE_PATCH('{"name": "x"}', '{"id": 47}') | +-------------------------------------------------+ | {"id": 47, "name": "x"} | +-------------------------------------------------+ mysql>SELECT JSON_MERGE_PATCH('1', 'true');+-------------------------------+ | JSON_MERGE_PATCH('1', 'true') | +-------------------------------+ | true | +-------------------------------+ mysql>SELECT JSON_MERGE_PATCH('[1, 2]', '{"id": 47}');+------------------------------------------+ | JSON_MERGE_PATCH('[1, 2]', '{"id": 47}') | +------------------------------------------+ | {"id": 47} | +------------------------------------------+ mysql>SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }',>'{ "a": 3, "c":4 }');+-----------------------------------------------------------+ | JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }') | +-----------------------------------------------------------+ | {"a": 3, "b": 2, "c": 4} | +-----------------------------------------------------------+ mysql>SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }',>'{ "a": 5, "d":6 }');+-------------------------------------------------------------------------------+ | JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }','{ "a": 5, "d":6 }') | +-------------------------------------------------------------------------------+ | {"a": 5, "b": 2, "c": 4, "d": 6} | +-------------------------------------------------------------------------------+Вы можете использовать эту функцию для удаления члена, указав
nullкак значение того же члена во втором аргументе, как показано здесь:mysql>
SELECT JSON_MERGE_PATCH('{"a":1, "b":2}', '{"b":null}');+--------------------------------------------------+ | JSON_MERGE_PATCH('{"a":1, "b":2}', '{"b":null}') | +--------------------------------------------------+ | {"a": 1} | +--------------------------------------------------+Этот пример показывает, что функция работает рекурсивно; то есть значения членов не ограничиваются скалярами, но могут сами являться документами JSON:
mysql>
SELECT JSON_MERGE_PATCH('{"a":{"x":1}}', '{"a":{"y":2}}');+----------------------------------------------------+ | JSON_MERGE_PATCH('{"a":{"x":1}}', '{"a":{"y":2}}') | +----------------------------------------------------+ | {"a": {"x": 1, "y": 2}} | +----------------------------------------------------+JSON_MERGE_PATCH()поддерживается в MySQL 5.7.22 и более поздних версиях.JSON_MERGE_PATCH() по сравнению с JSON_MERGE_PRESERVE(). Поведение
JSON_MERGE_PATCH()такое же, как уJSON_MERGE_PRESERVE(), за исключением двух следующих моментов:JSON_MERGE_PATCH()удаляет любой член в первом объекте с соответствующим ключом во втором объекте, при условии, что значение, связанное с ключом во втором объекте, не является JSONnull.Если второй объект имеет член с ключом, совпадающим с членом в первом объекте,
JSON_MERGE_PATCH()заменяет значение в первом объекте значением во втором объекте, тогда какJSON_MERGE_PRESERVE()добавляет второе значение к первому значению.
Этот пример сравнивает результаты слияния одних и тех же 3 JSON-объектов, каждый из которых имеет совпадающий ключ
"a", с каждой из этих двух функций:mysql>
SET @x = '{ "a": 1, "b": 2 }',>@y = '{ "a": 3, "c": 4 }',>@z = '{ "a": 5, "d": 6 }';mysql>SELECT JSON_MERGE_PATCH(@x, @y, @z) AS Patch,->JSON_MERGE_PRESERVE(@x, @y, @z) AS Preserve\G*************************** 1. row *************************** Patch: {"a": 5, "b": 2, "c": 4, "d": 6} Preserve: {"a": [1, 3, 5], "b": 2, "c": 4, "d": 6}
-
JSON_MERGE_PRESERVE(json_doc,json_doc[,json_doc] ...)Объединяет два или более JSON-документов и возвращает объединённый результат. Возвращает
NULL, если какой-либо аргумент являетсяNULL. Возникает ошибка, если какой-либо аргумент не является допустимым JSON-документом.Объединение происходит по следующим правилам. Дополнительную информацию см. в Нормализация, объединение и автоматическое обрамление JSON-значений.
Смежные массивы объединяются в один массив.
Смежные объекты объединяются в один объект.
Скалярное значение автоматически обрамляется массивом и объединяется как массив.
Смежный массив и объект объединяются путём автоматического обрамления объекта массивом и объединения двух массивов.
mysql>
SELECT JSON_MERGE_PRESERVE('[1, 2]', '[true, false]');+------------------------------------------------+ | JSON_MERGE_PRESERVE('[1, 2]', '[true, false]') | +------------------------------------------------+ | [1, 2, true, false] | +------------------------------------------------+ mysql>SELECT JSON_MERGE_PRESERVE('{"name": "x"}', '{"id": 47}');+----------------------------------------------------+ | JSON_MERGE_PRESERVE('{"name": "x"}', '{"id": 47}') | +----------------------------------------------------+ | {"id": 47, "name": "x"} | +----------------------------------------------------+ mysql>SELECT JSON_MERGE_PRESERVE('1', 'true');+----------------------------------+ | JSON_MERGE_PRESERVE('1', 'true') | +----------------------------------+ | [1, true] | +----------------------------------+ mysql>SELECT JSON_MERGE_PRESERVE('[1, 2]', '{"id": 47}');+---------------------------------------------+ | JSON_MERGE_PRESERVE('[1, 2]', '{"id": 47}') | +---------------------------------------------+ | [1, 2, {"id": 47}] | +---------------------------------------------+ mysql>SELECT JSON_MERGE_PRESERVE('{ "a": 1, "b": 2 }',>'{ "a": 3, "c": 4 }');+--------------------------------------------------------------+ | JSON_MERGE_PRESERVE('{ "a": 1, "b": 2 }','{ "a": 3, "c":4 }') | +--------------------------------------------------------------+ | {"a": [1, 3], "b": 2, "c": 4} | +--------------------------------------------------------------+ mysql>SELECT JSON_MERGE_PRESERVE('{ "a": 1, "b": 2 }','{ "a": 3, "c": 4 }',>'{ "a": 5, "d": 6 }');+----------------------------------------------------------------------------------+ | JSON_MERGE_PRESERVE('{ "a": 1, "b": 2 }','{ "a": 3, "c": 4 }','{ "a": 5, "d": 6 }') | +----------------------------------------------------------------------------------+ | {"a": [1, 3, 5], "b": 2, "c": 4, "d": 6} | +----------------------------------------------------------------------------------+Эта функция была добавлена в MySQL 5.7.22 в качестве синонима для
JSON_MERGE(). ФункцияJSON_MERGE()теперь устарела и может быть удалена в будущих версиях MySQL.Эта функция похожа на, но отличается от
JSON_MERGE_PATCH()во многих аспектах; см. JSON_MERGE_PATCH() по сравнению с JSON_MERGE_PRESERVE() для получения дополнительной информации. -
JSON_REMOVE(json_doc,path[,path] ...)Удаляет данные из JSON-документа и возвращает результат. Возвращает
NULL, если любой аргумент являетсяNULL. Возникает ошибка, если аргументjson_docне является допустимым JSON-документом или любой аргументpathне является допустимым выражением пути, не является$или содержит подстановочный знак*или**.Аргументы
pathвычисляются слева направо. Документ, полученный в результате вычисления одного пути, становится новым значением, по отношению к которому вычисляется следующий путь.Если элемент, подлежащий удалению, не существует в документе, это не является ошибкой; в этом случае путь не влияет на документ.
mysql>
SET @j = '["a", ["b", "c"], "d"]';mysql>SELECT JSON_REMOVE(@j, '$[1]');+-------------------------+ | JSON_REMOVE(@j, '$[1]') | +-------------------------+ | ["a", "d"] | +-------------------------+ -
JSON_REPLACE(json_doc,path,val[,path,val] ...)Заменяет существующие значения в JSON-документе и возвращает результат. Возвращает
NULL, еслиjson_docили любой аргументpathявляетсяNULL. Возникает ошибка, если аргументjson_docне является допустимым JSON-документом или любой аргументpathне является допустимым выражением пути или содержит подстановочный знак*или**.Пары путь-значение вычисляются слева направо. Документ, полученный в результате вычисления одной пары, становится новым значением, по отношению к которому вычисляется следующая пара.
Пара путь-значение для существующего пути в документе перезаписывает существующее значение документа новым значением. Пара путь-значение для несуществующего пути в документе игнорируется и не оказывает никакого влияния.
Для сравнения
JSON_INSERT(),JSON_REPLACE()иJSON_SET()см. обсуждениеJSON_SET().mysql>
SET @j = '{ "a": 1, "b": [2, 3]}';mysql>SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]');+-----------------------------------------------------+ | JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]') | +-----------------------------------------------------+ | {"a": 10, "b": [2, 3]} | +-----------------------------------------------------+ mysql>SELECT JSON_REPLACE(NULL, '$.a', 10, '$.c', '[true, false]');+-------------------------------------------------------+ | JSON_REPLACE(NULL, '$.a', 10, '$.c', '[true, false]') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+ mysql>SELECT JSON_REPLACE(@j, NULL, 10, '$.c', '[true, false]');+----------------------------------------------------+ | JSON_REPLACE(@j, NULL, 10, '$.c', '[true, false]') | +----------------------------------------------------+ | NULL | +----------------------------------------------------+ mysql>SELECT JSON_REPLACE(@j, '$.a', NULL, '$.c', '[true, false]');+-------------------------------------------------------+ | JSON_REPLACE(@j, '$.a', NULL, '$.c', '[true, false]') | +-------------------------------------------------------+ | {"a": null, "b": [2, 3]} | +-------------------------------------------------------+ -
JSON_SET(json_doc,path,val[,path,val] ...)Вставляет или обновляет данные в JSON-документе и возвращает результат. Возвращает
NULL, еслиjson_docилиpathявляютсяNULL, или еслиpath, если задан, не находит объект. В противном случае возникает ошибка, если аргументjson_docне является допустимым JSON-документом или любой аргументpathне является допустимым выражением пути или содержит подстановочный знак*или**.Пары путь-значение вычисляются слева направо. Документ, полученный в результате вычисления одной пары, становится новым значением, по отношению к которому вычисляется следующая пара.
Пара путь-значение для существующего пути в документе перезаписывает существующее значение документа новым значением. Пара путь-значение для несуществующего пути в документе добавляет значение в документ, если путь идентифицирует один из следующих типов значений:
Член, отсутствующий в существующем объекте. Член добавляется в объект и связывается с новым значением.
Позиция после конца существующего массива. Массив расширяется новым значением. Если существующее значение не является массивом, оно автоматически обрамляется массивом, а затем расширяется новым значением.
В противном случае пара путь-значение для несуществующего пути в документе игнорируется и не оказывает никакого влияния.
Функции
JSON_SET(),JSON_INSERT()иJSON_REPLACE()взаимосвязаны:JSON_SET()заменяет существующие значения и добавляет несуществующие.JSON_INSERT()вставляет значения без замены существующих.JSON_REPLACE()заменяет только существующие значения.
Следующие примеры иллюстрируют эти различия, используя один путь, который существует в документе (
$.a), и другой, который не существует ($.c):mysql>
SET @j = '{ "a": 1, "b": [2, 3]}';mysql>SELECT JSON_SET(@j, '$.a', 10, '$.c', '[true, false]');+-------------------------------------------------+ | JSON_SET(@j, '$.a', 10, '$.c', '[true, false]') | +-------------------------------------------------+ | {"a": 10, "b": [2, 3], "c": "[true, false]"} | +-------------------------------------------------+ mysql>SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');+----------------------------------------------------+ | JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]') | +----------------------------------------------------+ | {"a": 1, "b": [2, 3], "c": "[true, false]"} | +----------------------------------------------------+ mysql>SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]');+-----------------------------------------------------+ | JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]') | +-----------------------------------------------------+ | {"a": 10, "b": [2, 3]} | +-----------------------------------------------------+ -
Удаляет кавычки из JSON-значения и возвращает результат в виде
utf8mb4строки. ВозвращаетNULL, если аргумент являетсяNULL. Возникает ошибка, если значение начинается и заканчивается двойными кавычками, но не является допустимой строковой литералом JSON.Внутри строки определённые последовательности имеют специальное значение, если не включен SQL-режим
NO_BACKSLASH_ESCAPES. Каждая из этих последовательностей начинается с обратной косой черты (\), известной как символ экранирования. MySQL распознаёт последовательности экранирования, показанные в таблице 12.23, «JSON_UNQUOTE() Специальные последовательности экранирования символов». Для всех остальных последовательностей экранирования обратная косая черта игнорируется. То есть экранированный символ интерпретируется так, как если бы он не был экранирован. Например,\xпросто отображаетx. Эти последовательности чувствительны к регистру. Например,\bинтерпретируется как возврат на одну позицию назад, но\Bинтерпретируется какB.Таблица 12.23 JSON_UNQUOTE() Специальные последовательности экранирования символов
Таблица 12.23 JSON_UNQUOTE() Специальные последовательности экранирования символов Последовательность экранирования Символ, представленный последовательностью \"Символ двойной кавычки ( ")\bСимвол возврата на одну позицию назад \fСимвол подачи формы \nСимвол перевода строки \rСимвол возврата каретки \tСимвол табуляции \\Символ обратной косой черты ( \)\uXXXXUTF-8 байты для Unicode-значения XXXXДва простых примера использования этой функции показаны здесь:
mysql>
SET @j = '"abc"';mysql>SELECT @j, JSON_UNQUOTE(@j);+-------+------------------+ | @j | JSON_UNQUOTE(@j) | +-------+------------------+ | "abc" | abc | +-------+------------------+ mysql>SET @j = '[1, 2, 3]';mysql>SELECT @j, JSON_UNQUOTE(@j);+-----------+------------------+ | @j | JSON_UNQUOTE(@j) | +-----------+------------------+ | [1, 2, 3] | [1, 2, 3] | +-----------+------------------+Следующий набор примеров показывает, как
JSON_UNQUOTEобрабатывает экранирования при отключённом и включённом режимеNO_BACKSLASH_ESCAPES:mysql>
SELECT @@sql_mode;+------------+ | @@sql_mode | +------------+ | | +------------+ mysql>SELECT JSON_UNQUOTE('"\\t\\u0032"');+------------------------------+ | JSON_UNQUOTE('"\\t\\u0032"') | +------------------------------+ | 2 | +------------------------------+ mysql>SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';mysql>SELECT JSON_UNQUOTE('"\\t\\u0032"');+------------------------------+ | JSON_UNQUOTE('"\\t\\u0032"') | +------------------------------+ | \t\u0032 | +------------------------------+ mysql>SELECT JSON_UNQUOTE('"\t\u0032"');+----------------------------+ | JSON_UNQUOTE('"\t\u0032"') | +----------------------------+ | 2 | +----------------------------+
© 2025 Oracle
Licensed under the GPLv2 License.