À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!