O JSON (JavaScript Object Notation) é um formato de troca de dados que se tornou muito popular nos últimos anos devido à sua simplicidade e flexibilidade. Ele é amplamente utilizado em aplicações web e mobile para transmitir informações entre o servidor e o cliente. O JSON é uma estrutura de dados bastante versátil, que permite representar informações complexas de forma simples e legível, o que o torna uma excelente escolha para armazenar e compartilhar dados.
Uma das grandes vantagens de salvar o JSON diretamente no banco de dados é a flexibilidade na estruturação dos dados. Ao contrário do modelo relacional tradicional, que exige uma estrutura rígida de tabelas e colunas, o JSON permite que as informações sejam armazenadas em uma única coluna, sem a necessidade de definir uma estrutura prévia. Isso é especialmente útil em aplicações em que as informações podem variar muito de acordo com o contexto, como em aplicações de gerenciamento de conteúdo, por exemplo. Além disso, ao armazenar o JSON diretamente no banco de dados, evitamos a necessidade de fazer múltiplas consultas a várias tabelas para obter todas as informações necessárias, o que pode melhorar significativamente o desempenho da aplicação.
Sendo então adotada como estratégia em muitas implementações é de se esperar que a MICROSOFT nos dessem uma opção ou função nativa para pesquisar conteudo dentro dessas colunas repletas de JSON.
Para pesquisar em um campo do tipo varchar(MAX) que contém um JSON, podemos utilizar a função JSON_VALUE para extrair os valores de uma chave específica no JSON.
Suponhamos que temos a tabela “Clientes” com os seguintes campos:
Id | Nome | DadosCliente |
---|---|---|
1 | Ana | {“idade”: 28, “email”: “ana@teste.com“, “telefone”: “(11) 99999-9999”} |
2 | João | {“idade”: 35, “email”: “joao@teste.com“, “telefone”: “(21) 88888-8888”} |
Para buscar todos os clientes que possuem email “ana@teste.com“, podemos fazer a seguinte query:
SELECT *
FROM Clientes
WHERE JSON_VALUE(DadosCliente, '$.email') = 'ana@teste.com'
A função JSON_VALUE recebe dois parâmetros: o primeiro é o campo que contém o JSON, e o segundo é a expressão que indica a chave que desejamos extrair. Neste caso, estamos buscando a chave “email” dentro do campo “DadosCliente”.
É importante ressaltar que, ao utilizar a função JSON_VALUE em um campo que contém um JSON, o desempenho da query pode ser afetado. Para evitar isso, é recomendável utilizar índices que cubram o campo que contém o JSON e, se possível, evitar a utilização de funções dentro do WHERE, fazendo a busca diretamente pelos valores da coluna.