V MySQL je to JSON_UNQUOTE()
funkce „zruší citace“ dokumentu JSON a vrátí výsledek jako utf8mb4
řetězec.
Jako argument poskytnete dokument JSON a funkce se postará o zbytek.
Syntaxe
Syntaxe vypadá takto:
JSON_UNQUOTE(json_val)
Kde json_val
je dokument JSON, který chcete bez uvozovek.
Příklad
Zde je příklad k demonstraci.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Výsledek:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Escape Characters
Způsob, jakým tato funkce zpracovává znaky escape, závisí na tom, zda NO_BACKSLASH_ESCAPES
je povoleno nebo zakázáno.
Když je NO_BACKSLASH_ESCAPES zakázáno
NO_BACKSLASH_ESCAPES
režim je ve výchozím nastavení v MySQL 8.0 zakázán.
Zde je to, co se stane, pokud zahrneme \t
k určení znaku tabulátoru v řetězci, když NO_BACKSLASH_ESCAPES
je zakázáno a bez pomocí JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Výsledek:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
A co se stane, když použijeme JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Výsledek:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Můžeme to překonat použitím dvou zpětných lomítek (\\t
). Mějte však na paměti, že pokud to provedete, ne změní výsledek pomocí JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Výsledek:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Když je povoleno NO_BACKSLASH_ESCAPES
Co se stane, když povolíme NO_BACKSLASH_ESCAPES
před spuštěním předchozího příkazu:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Výsledek:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
A co se stane, když odstraníme první zpětné lomítko:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Výsledek:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+