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

Como consultar a coluna JSON no MySQL


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