Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_UNQUOTE() – Rimuove le citazioni da un documento JSON in MySQL

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 |
+--------------------+-----------------+