In MySQL is de JSON_UNQUOTE()
functie "unquote" een JSON-document en retourneert het resultaat als een utf8mb4
tekenreeks.
U geeft het JSON-document op als argument en de functie doet de rest.
Syntaxis
De syntaxis gaat als volgt:
JSON_UNQUOTE(json_val)
Waar json_val
is het JSON-document dat u niet-geciteerd wilt hebben.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultaat:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Escape-tekens
De manier waarop deze functie escape-tekens verwerkt, hangt af van of NO_BACKSLASH_ESCAPES
is ingeschakeld of uitgeschakeld.
Als NO_BACKSLASH_ESCAPES is uitgeschakeld
De NO_BACKSLASH_ESCAPES
modus is standaard uitgeschakeld in MySQL 8.0.
Dit is wat er gebeurt als we \t
include opnemen om een tab-teken in een tekenreeks op te geven wanneer NO_BACKSLASH_ESCAPES
is uitgeschakeld, en zonder met behulp van JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Resultaat:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
En dit is wat er gebeurt als we JSON_UNQUOTE()
gebruiken :
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Resultaat:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
We kunnen dit oplossen door twee backslashes te gebruiken (\\t
). Houd er echter rekening mee dat dit de uitkomst zal veranderen wanneer niet met behulp van JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultaat:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Als NO_BACKSLASH_ESCAPES is ingeschakeld
Dit is wat er gebeurt als we NO_BACKSLASH_ESCAPES
inschakelen voordat u de vorige instructie uitvoert:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultaat:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
En dit is wat er gebeurt als we de eerste backslash verwijderen:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultaat:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+