Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JSON_UNQUOTE() – Entfernen Sie Anführungszeichen aus einem JSON-Dokument in MySQL

In MySQL der JSON_UNQUOTE() -Funktion hebt die Anführungszeichen eines JSON-Dokuments auf und gibt das Ergebnis als utf8mb4 zurück Zeichenfolge.

Sie geben das JSON-Dokument als Argument an, und die Funktion erledigt den Rest.

Syntax

Die Syntax lautet wie folgt:

JSON_UNQUOTE(json_val)

Wobei json_val ist das JSON-Dokument, das Sie nicht in Anführungszeichen setzen möchten.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET @data = '"Homer Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Ergebnis:

+-----------------+---------------+
| Original        | Unquoted      |
+-----------------+---------------+
| "Homer Simpson" | Homer Simpson |
+-----------------+---------------+

Escapezeichen

Wie diese Funktion mit Escape-Zeichen umgeht, hängt davon ab, ob NO_BACKSLASH_ESCAPES aktiviert oder deaktiviert ist.

Wenn NO_BACKSLASH_ESCAPES deaktiviert ist

Der NO_BACKSLASH_ESCAPES Der Modus ist in MySQL 8.0 standardmäßig deaktiviert.

Folgendes passiert, wenn wir \t einfügen um ein Tabulatorzeichen innerhalb einer Zeichenfolge anzugeben, wenn NO_BACKSLASH_ESCAPES ist deaktiviert und ohne mit JSON_UNQUOTE() .

SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original;

Ergebnis:

+-------------------+
| Original          |
+-------------------+
| "Homer 	 Simpson" |
+-------------------+

Und das passiert, wenn wir JSON_UNQUOTE() verwenden :

SET @data = '"Homer \t Simpson"';
SELECT JSON_UNQUOTE(@data) Unquoted;

Ergebnis:

ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.

Wir können dies umgehen, indem wir zwei Backslashes verwenden (\\t ). Beachten Sie jedoch, dass dies das Ergebnis ändert, wenn nicht mit JSON_UNQUOTE() .

SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Ergebnis:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+

Wenn NO_BACKSLASH_ESCAPES aktiviert ist

Folgendes passiert, wenn wir NO_BACKSLASH_ESCAPES aktivieren bevor die vorherige Anweisung ausgeführt wird:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Ergebnis:

+---------------------+------------------+
| Original            | Unquoted         |
+---------------------+------------------+
| "Homer \\t Simpson" | Homer \t Simpson |
+---------------------+------------------+

Und das passiert, wenn wir den ersten Backslash entfernen:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Ergebnis:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+