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