Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JSON_UNQUOTE() – Remover citações de um documento JSON no MySQL


No MySQL, o JSON_UNQUOTE() a função "sem aspas" um documento JSON e retorna o resultado como um utf8mb4 fragmento.

Você fornece o documento JSON como um argumento e a função fará o resto.


Sintaxe


A sintaxe fica assim:
JSON_UNQUOTE(json_val)

Onde json_val é o documento JSON que você deseja sem aspas.

Exemplo


Aqui está um exemplo para demonstrar.
SET @data = '"Homer Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

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

Caracteres de escape


A forma como esta função trata os caracteres de escape depende se NO_BACKSLASH_ESCAPES está habilitado ou desabilitado.

Quando NO_BACKSLASH_ESCAPES está desabilitado


NO_BACKSLASH_ESCAPES O modo está desabilitado por padrão no MySQL 8.0.

Veja o que acontece se incluirmos \t para especificar um caractere de tabulação em uma string quando NO_BACKSLASH_ESCAPES está desativado e sem usando JSON_UNQUOTE() .
SET @data = '"Homer \t Simpson"';
SELECT 
  @data Original;

Resultado:
+-------------------+
| Original          |
+-------------------+
| "Homer 	 Simpson" |
+-------------------+

E aqui está o que acontece se usarmos 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 superar isso usando duas barras invertidas (\\t ). No entanto, lembre-se de que isso mudará o resultado quando não usando JSON_UNQUOTE() .
SET @data = '"Homer \\t Simpson"';
SELECT 
  @data Original, 
  JSON_UNQUOTE(@data) Unquoted;

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

Quando NO_BACKSLASH_ESCAPES está ativado


Veja o que acontece quando ativamos NO_BACKSLASH_ESCAPES antes de executar a instrução 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 |
+---------------------+------------------+

E aqui está o que acontece se removermos a primeira 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 |
+--------------------+-----------------+