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

JSON_QUOTE() – Como escapar caracteres em strings usadas como valores JSON no MySQL


Ao trabalhar com JSON e MySQL, às vezes você pode precisar escapar strings para que seus caracteres de aspas não interfiram na interpretação do documento JSON. Nesses casos, você pode usar o JSON_QUOTE() função para escapar de strings potencialmente problemáticas.

JSON_QUOTE() é usado para produzir um literal de string JSON válido que pode ser incluído em um documento JSON. Por exemplo, você pode querer que um elemento em uma matriz tenha o texto null como um literal de string, em vez de ter um valor nulo real. Essa função pode ser usada para garantir que o texto seja adicionado como um literal de string, em vez de um valor nulo.

Para usá-lo, basta chamar a função enquanto passa a string.


Sintaxe


A sintaxe fica assim:
JSON_QUOTE(string)

Onde string é a string a ser escapada.

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.

Primeiro, vamos ver o que acontece quando usamos o JSON_ARRAY() função para criar uma matriz.
SELECT JSON_ARRAY("Quente", "Quente", "Frio") AS 'Resultado';

Resultado:
+-------------------------+| Resultado |+-------------------------+| ["Quente", "Quente", "Frio"] |+------------------------+

O resultado é um array que contém 3 elementos. Sabemos que é uma matriz porque começa com um colchete de abertura ([ ) e termina com um colchete de fechamento (] ). Também sabemos que cada elemento é uma string, porque eles estão entre aspas duplas. Uma vírgula separa cada elemento.

Agora vamos ver o que acontece quando usamos o JSON_QUOTE() em vez de.
SELECT JSON_QUOTE('"Quente", "Quente", "Frio"') AS 'Resultado';

Resultado:
+-------------------------------+| Resultado |+------------------------------------------+| "\"Quente\", \"Quente\", \"Frio\"" |+----------------------------- --+

Não recebemos matriz. Recebemos uma corda. Sabemos que é uma string porque começa e termina com um caractere de aspas duplas. Quaisquer aspas duplas dentro da string são escapadas com o caractere de barra invertida (\ ).

Se esses caracteres não foram escapados, as primeiras aspas duplas (depois de Hot ) terminaria inadvertidamente a string. Portanto, não poderíamos incluir o resto da string. Ao escapar certos caracteres, estamos dizendo ao MySQL para não interpretar esses caracteres como faria normalmente.

Exemplo 2 – Números


O mesmo conceito se aplica aos números, exceto que os números não são colocados entre aspas duplas.

Assim, podemos criar uma matriz que contém 3 elementos, todos os quais são números.
SELECT JSON_ARRAY(1, 2, 3) AS 'Resultado';

Resultado:
+-----------+| Resultado |+-----------+| [1, 2, 3] |+-----------+

E aqui está o que acontece se mudarmos para o JSON_QUOTE() função.
SELECT JSON_QUOTE('[1, 2, 3]') AS 'Resultado';

Resultado:
+-------------+| Resultado |+-------------+| "[1, 2, 3]" |+-------------+

Assim, obtemos o mesmo resultado, exceto que todo o array está entre aspas duplas. Isso faz com que seja uma string em vez de uma matriz.

Exemplo 3 – Adicionando a matrizes/objetos


Poderíamos pegar esse literal de string e adicioná-lo como um elemento em um array.
SELECT JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'), 8, 9) AS 'Resultado';

Resultado:
+-------------------------+| Resultado |+-------------------------+| ["\"[1, 2, 3]\"", 8, 9] |+-------------------------+

Neste caso, a string literal é o primeiro elemento, com 8 e 9 sendo o segundo e terceiro elementos, respectivamente.

Também poderíamos usar esse literal de string em um objeto.
SELECT JSON_OBJECT('Chave', JSON_QUOTE('[1, 2, 3]')) AS 'Resultado';

Resultado:
+--------------------------+| Resultado |+--------------------------+| {"Chave":"\"[1, 2, 3]\""} |+--------------------------+ 

Exemplo 4 – Extraindo Valores


Portanto, se precisarmos extrair valores do nosso documento JSON, ele será interpretado como um literal de string em vez de um array.

Primeiro, eis o que acontece se definirmos um array com os três números como elementos separados e, em seguida, extrair o primeiro elemento do array.
SET @data1 =JSON_ARRAY(1, 2, 3);SELECT @data1 AS '@data1', JSON_EXTRACT(@data1, '$[0]');

Resultado:
+-----------+------------------------------+| @data1 | JSON_EXTRACT(@data1, '$[0]') |+-----------+------------------------ ------+| [1, 2, 3] | 1 |+-----------+------------------------------+

Portanto, essa matriz consiste em três elementos – cada elemento é um elemento separado na matriz.

Agora, aqui está o que acontece se usarmos JSON_QUOTE() para ter todos os três números e seus colchetes convertidos em uma string literal, adicione-os à matriz e extraia o primeiro elemento da matriz.
SET @data2 =JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'));SELECT @data2 AS '@data2', JSON_EXTRACT(@data2, '$[0]');

Resultado:
+-------------------+-------------------------- ----+| @data2 | JSON_EXTRACT(@data2, '$[0]') |+-------------------+---------------- --------------+| ["\"[1, 2, 3]\""] | "\"[1, 2, 3]\"" |+------------------+--------------- ---------------+

Portanto, neste caso, a matriz consiste em apenas um elemento - o literal de string inteiro.