Mysql
 sql >> Base de données >  >> RDS >> Mysql

JSON_UNQUOTE() - Supprimer les guillemets d'un document JSON dans MySQL

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)

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 |
+--------------------+-----------------+