sql >> Base de Datos >  >> RDS >> Mysql

Cómo consultar la columna JSON en MySQL

A veces, es posible que necesite buscar una matriz de objetos JSON, extraer datos JSON o recuperar datos JSON en MySQL. En este artículo, veremos cómo consultar la columna JSON en MySQL.


Cómo consultar la columna JSON en MySQL

Digamos que tiene la siguiente tabla usuarios(id, detalles) donde id es un número entero y clave principal mientras que detalles es una columna de tipo de datos JSON.

create table users(
    id int auto_increment primary key,
    details json
   );

Insertaremos los siguientes datos JSON en nuestra tabla.

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 } }'
);


Cómo recuperar datos de la columna JSON en MySQL

MySQL proporciona dos operadores ( -> y ->> ) para extraer datos de columnas JSON.

->> obtendrá el valor de la cadena, mientras que -> obtendrá el valor sin comillas.

Aquí está la consulta SQL para extraer el nombre del navegador de detalles columna

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 puede ver, ->> devuelve la salida como cadenas entrecomilladas, mientras que -> devuelve los valores tal como son.

También puede usar estos operadores en la cláusula WHERE como se muestra a continuación.

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      |
+----+--------------+--------------+

Si desea recuperar resolución.x valor, es decir, de un objeto, entonces puede hacerlo usando el operador de punto (.), como se muestra a continuación.

mysql> select details->'$.resolution.x' as  width
       from users;
+----+-----------+
| id |  width    |
+----+-----------+
|  1 | 1920      |
|  2 | 1680      |
|  3 | 1280      |
+----+-----------+

De manera similar, si desea extraer un elemento de matriz de un JSON, puede acceder a ellos usando corchetes '[]' y el índice del elemento de matriz. Aquí está la consulta SQL para extraer el primer elemento de la matriz gastar .

mysql> select details->>'$.spend[0]' as spend
       from users;
+----+-----------+
| id |  spend    |
+----+-----------+
|  1 | 100       |
|  2 | 150       |
|  3 | 200       |
+----+-----------+


Extrae JSON usando Ubiq

La herramienta Ubiq Reporting admite todas las consultas SQL anteriores y facilita la visualización de los resultados SQL de diferentes maneras. Aquí está la primera consulta SQL mencionada anteriormente, en Ubiq.

¿Necesita una herramienta de informes para MySQL? Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!