Às vezes, pode ser necessário pesquisar uma matriz de objetos JSON, extrair dados JSON ou recuperar dados JSON no MySQL. Neste artigo, veremos como consultar a coluna JSON no MySQL.
Como consultar a coluna JSON no MySQL
Digamos que você tenha a seguinte tabela users(id, details) onde id é um número inteiro e chave primária enquanto detalhes é uma coluna de tipo de dados JSON.
create table users( id int auto_increment primary key, details json );
Vamos inserir os seguintes dados JSON em nossa tabela.
insert into users(details) values( '{ "page": "/" , "name": "Safari", "os": "Mac", "spend": [100, 50] "resolution": { "x": 1920, "y": 1080 } }' ), ( '{ "page": "/products", "name": "Chrome", "os": "Windows", "spend": [150, 250] "resolution": { "x": 1680, "y": 1050 } }' ), ( '{ "page": "/shoes", "name": "Firefox", "os": "Windows", "spend": [200,300] "resolution": { "x": 1280, "y": 800 } }' );
Como recuperar dados da coluna JSON no MySQL
O MySQL fornece dois operadores ( -> e ->> ) para extrair dados de colunas JSON.
->> obterá o valor da string enquanto -> obterá o valor sem aspas.
Aqui está a consulta SQL para extrair o nome do navegador dos detalhes coluna
mysql> select id, details->>'$.name' as browser_str, details->'$.name' as browser_name from users; +----+--------------+--------------+ | id | browser_str | browser_name | +----+--------------+--------------+ | 1 | "Safari" | Safari | | 2 | "Chrome" | Chrome | | 3 | "Firefox" | Firefox | +----+--------------+--------------+
Como você pode ver ->> retorna a saída como strings entre aspas, enquanto -> retorna os valores como estão.
Você também pode usar esses operadores na cláusula WHERE, conforme mostrado abaixo.
mysql> select id, details->>'$.name' as browser_str, details->'$.name' as browser_name from users where ->>'$.name'="Chrome"; +----+--------------+--------------+ | id | browser_str | browser_name | +----+--------------+--------------+ | 2 | "Chrome" | Chrome | +----+--------------+--------------+
Se você deseja recuperar resolution.x value, ou seja, de um objeto, então você pode fazer isso usando o operador ponto (.), conforme mostrado abaixo.
mysql> select details->'$.resolution.x'
as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+
Da mesma forma, se você deseja extrair um elemento de matriz de um JSON, pode acessá-los usando colchetes '[ ]' e índice do elemento de matriz. Aqui está a consulta SQL para extrair o primeiro elemento da matriz gaste .
mysql> select details->>'$.spend[0]'
as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Extrair JSON usando Ubiq
A ferramenta Ubiq Reporting suporta todas as consultas SQL acima e facilita a visualização dos resultados SQL de diferentes maneiras. Aqui está a primeira consulta SQL mencionada acima, no Ubiq.
Precisa de uma ferramenta de relatório para MySQL? A Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!