W MySQL, JSON_UNQUOTE()
funkcja „odnotowuje” dokument JSON i zwraca wynik jako utf8mb4
ciąg.
Podajesz dokument JSON jako argument, a funkcja zrobi resztę.
Składnia
Składnia wygląda tak:
JSON_UNQUOTE(json_val)
Gdzie json_val
jest dokumentem JSON, którego nie chcesz cytować.
Przykład
Oto przykład do zademonstrowania.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Wynik:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Znaki ucieczki
Sposób, w jaki ta funkcja obsługuje znaki ucieczki, zależy od tego, czy NO_BACKSLASH_ESCAPES
jest włączony lub wyłączony.
Gdy NO_BACKSLASH_ESCAPES jest wyłączone
NO_BACKSLASH_ESCAPES
tryb jest domyślnie wyłączony w MySQL 8.0.
Oto, co się stanie, jeśli dodamy \t
aby określić znak tabulacji w ciągu, gdy NO_BACKSLASH_ESCAPES
jest wyłączony i bez przy użyciu JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Wynik:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
A oto, co się stanie, jeśli użyjemy JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Wynik:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Możemy to obejść, używając dwóch ukośników odwrotnych (\\t
). Pamiętaj jednak, że zrobienie tego zmieni wynik, gdy nie przy użyciu JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Wynik:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Gdy NO_BACKSLASH_ESCAPES jest włączone
Oto, co się dzieje, gdy włączymy NO_BACKSLASH_ESCAPES
przed uruchomieniem poprzedniej instrukcji:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Wynik:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
A oto, co się stanie, jeśli usuniemy pierwszy ukośnik odwrotny:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Wynik:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+