I MySQL er JSON_UNQUOTE()
funktionen "uncites" et JSON-dokument og returnerer resultatet som en utf8mb4
streng.
Du angiver JSON-dokumentet som et argument, og funktionen klarer resten.
Syntaks
Syntaksen ser sådan ud:
JSON_UNQUOTE(json_val)
Hvor json_val
er det JSON-dokument, du ønsker uden citat.
Eksempel
Her er et eksempel til at demonstrere.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Resultat:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Escape-tegn
Måden denne funktion håndterer escape-tegn på afhænger af, om NO_BACKSLASH_ESCAPES
er aktiveret eller deaktiveret.
Når NO_BACKSLASH_ESCAPES er deaktiveret
Her er, hvad der sker, hvis vi inkluderer \t
for at angive et tabulatortegn i en streng, når NO_BACKSLASH_ESCAPES
er deaktiveret og uden ved hjælp af JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Resultat:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
Og her er, hvad der sker, hvis vi bruger 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 overvinde dette ved at bruge to omvendte skråstreg (\\t
). Husk dog, at dette vil ændre resultatet, når ikke ved hjælp af 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 er aktiveret
Her er, hvad der sker, når vi aktiverer NO_BACKSLASH_ESCAPES
før du kører den forrige sætning:
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 | +---------------------+------------------+
Og her er, hvad der sker, hvis vi fjerner den første skråstreg:
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 | +--------------------+-----------------+