I MySQL, JSON_UNQUOTE()
funktionen "avciterar" ett JSON-dokument och returnerar resultatet som en utf8mb4
sträng.
Du tillhandahåller JSON-dokumentet som ett argument, och funktionen gör resten.
Syntax
Syntaxen ser ut så här:
JSON_UNQUOTE(json_val)
Där json_val
är det JSON-dokument du vill ha utan citat.
Exempel
Här är ett exempel att visa.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultat:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Escape-tecken
Hur den här funktionen hanterar escape-tecken beror på om NO_BACKSLASH_ESCAPES
är aktiverad eller inaktiverad.
När NO_BACKSLASH_ESCAPES är inaktiverat
Så här händer om vi inkluderar \t
för att ange ett tabbtecken i en sträng när NO_BACKSLASH_ESCAPES
är inaktiverad och utan med JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Resultat:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
Och här är vad som händer om vi använder JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Resultat:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Vi kan övervinna detta genom att använda två omvända snedstreck (\\t
). Tänk dock på att detta kommer att ändra resultatet när inte med JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultat:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
När NO_BACKSLASH_ESCAPES är aktiverat
Här är vad som händer när vi aktiverar NO_BACKSLASH_ESCAPES
innan du kör föregående programsats:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultat:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
Och här är vad som händer om vi tar bort det första snedstrecket:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultat:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+