In MySQL, il JSON_UNQUOTE()
la funzione "annulla" un documento JSON e restituisce il risultato come utf8mb4
stringa.
Fornisci il documento JSON come argomento e la funzione farà il resto.
Sintassi
La sintassi è questa:
JSON_UNQUOTE(json_val)
Dove json_val
è il documento JSON che desideri non tra virgolette.
Esempio
Ecco un esempio da dimostrare.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Risultato:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Caratteri di escape
Il modo in cui questa funzione gestisce i caratteri di escape dipende da NO_BACKSLASH_ESCAPES
è abilitato o disabilitato.
Quando NO_BACKSLASH_ESCAPES è disabilitato
Il NO_BACKSLASH_ESCAPES
la modalità è disabilitata per impostazione predefinita in MySQL 8.0.
Ecco cosa succede se includiamo \t
per specificare un carattere di tabulazione all'interno di una stringa quando NO_BACKSLASH_ESCAPES
è disabilitato e senza utilizzando JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Risultato:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
Ed ecco cosa succede se utilizziamo JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Risultato:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Possiamo superare questo problema utilizzando due barre rovesciate (\\t
). Tuttavia, tieni presente che ciò cambierà il risultato quando non utilizzando JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Risultato:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Quando NO_BACKSLASH_ESCAPES è abilitato
Ecco cosa succede quando abilitiamo NO_BACKSLASH_ESCAPES
prima di eseguire l'istruzione precedente:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Risultato:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
Ed ecco cosa succede se rimuoviamo la prima barra rovesciata:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Risultato:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+