sql >> Base de Datos >  >> RDS >> Mysql

JSON_UNQUOTE():elimina las comillas de un documento JSON en MySQL

En MySQL, JSON_UNQUOTE() la función "elimina las comillas" de un documento JSON y devuelve el resultado como utf8mb4 cadena.

Proporcionas el documento JSON como argumento y la función hará el resto.

Sintaxis

La sintaxis es así:

JSON_UNQUOTE(json_val)

Donde json_val es el documento JSON que desea sin comillas.

Ejemplo

Aquí hay un ejemplo para demostrarlo.

SET @data = '"Homer Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultado:

+-----------------+---------------+
| Original        | Unquoted      |
+-----------------+---------------+
| "Homer Simpson" | Homer Simpson |
+-----------------+---------------+

Personajes de escape

La forma en que esta función maneja los caracteres de escape depende de si NO_BACKSLASH_ESCAPES está habilitado o deshabilitado.

Cuando NO_BACKSLASH_ESCAPES está deshabilitado

El NO_BACKSLASH_ESCAPES el modo está deshabilitado por defecto en MySQL 8.0.

Esto es lo que sucede si incluimos \t para especificar un carácter de tabulación dentro de una cadena cuando NO_BACKSLASH_ESCAPES está deshabilitado y sin usando JSON_UNQUOTE() .

SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original;

Resultado:

+-------------------+
| Original          |
+-------------------+
| "Homer 	 Simpson" |
+-------------------+

Y esto es lo que sucede si usamos JSON_UNQUOTE() :

SET @data = '"Homer \t Simpson"';
SELECT JSON_UNQUOTE(@data) Unquoted;

Resultado:

ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.

Podemos solucionar esto usando dos barras invertidas (\\t ). Sin embargo, tenga en cuenta que hacer esto cambiará el resultado cuando no usando JSON_UNQUOTE() .

SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultado:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+

Cuando NO_BACKSLASH_ESCAPES está habilitado

Esto es lo que sucede cuando habilitamos NO_BACKSLASH_ESCAPES antes de ejecutar la sentencia anterior:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultado:

+---------------------+------------------+
| Original            | Unquoted         |
+---------------------+------------------+
| "Homer \\t Simpson" | Homer \t Simpson |
+---------------------+------------------+

Y esto es lo que sucede si eliminamos la primera barra invertida:

SET @@sql_mode = 'NO_BACKSLASH_ESCAPES';
SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

Resultado:

+--------------------+-----------------+
| Original           | Unquoted        |
+--------------------+-----------------+
| "Homer \t Simpson" | Homer 	 Simpson |
+--------------------+-----------------+