Dans MySQL, le JSON_UNQUOTE()
la fonction "unquote" un document JSON et renvoie le résultat sous la forme utf8mb4
chaîne.
Vous fournissez le document JSON comme argument, et la fonction fera le reste.
Syntaxe
La syntaxe ressemble à ceci :
JSON_UNQUOTE(json_val)
Où json_val
est le document JSON que vous voulez sans guillemets.
Exemple
Voici un exemple pour illustrer.
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Résultat :
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
Caractères d'échappement
La façon dont cette fonction gère les caractères d'échappement dépend si NO_BACKSLASH_ESCAPES
est activé ou désactivé.
Lorsque NO_BACKSLASH_ESCAPES est désactivé
Le NO_BACKSLASH_ESCAPES
le mode est désactivé par défaut dans MySQL 8.0.
Voici ce qui se passe si nous incluons \t
pour spécifier un caractère de tabulation dans une chaîne lorsque NO_BACKSLASH_ESCAPES
est désactivé, et sans en utilisant JSON_UNQUOTE()
.
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
Résultat :
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
Et voici ce qui se passe si nous utilisons JSON_UNQUOTE()
:
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
Résultat :
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
Nous pouvons surmonter cela en utilisant deux barres obliques inverses (\\t
). Cependant, gardez à l'esprit que cela changera le résultat si pas en utilisant JSON_UNQUOTE()
.
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Résultat :
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
Lorsque NO_BACKSLASH_ESCAPES est activé
Voici ce qui se passe lorsque nous activons NO_BACKSLASH_ESCAPES
avant d'exécuter l'instruction précédente :
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Résultat :
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+
Et voici ce qui se passe si nous supprimons la première barre oblique inverse :
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
Résultat :
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+