A volte potrebbe essere necessario cercare una matrice di oggetti JSON, estrarre dati JSON o recuperare dati JSON in MySQL. In questo articolo, vedremo come interrogare la colonna JSON in MySQL.
Come eseguire query sulla colonna JSON in MySQL
Supponiamo che tu abbia la seguente tabella users(id, details) dove id è un numero intero e una chiave primaria mentre dettagli è una colonna del tipo di dati JSON.
create table users( id int auto_increment primary key, details json );
Inseriremo i seguenti dati JSON nella nostra tabella.
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 } }' );
Come recuperare i dati dalla colonna JSON in MySQL
MySQL fornisce due operatori ( -> e ->> ) per estrarre i dati dalle colonne JSON.
->> otterrà il valore della stringa mentre -> recupererà il valore senza virgolette.
Ecco la query SQL per estrarre il nome del browser dai dettagli colonna
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 | +----+--------------+--------------+
Come puoi vedere ->> restituisce l'output come stringhe tra virgolette, mentre -> restituisce i valori come sono.
Puoi anche utilizzare questi operatori nella clausola WHERE come mostrato di seguito.
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 vuoi recuperare risoluzione.x valore, ovvero da un oggetto, puoi farlo utilizzando l'operatore punto (.), come mostrato di seguito.
mysql> select details->'$.resolution.x'
as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+
Allo stesso modo, se desideri estrarre un elemento dell'array da un JSON, puoi accedervi utilizzando le parentesi quadre "[ ]" e l'indice dell'elemento dell'array. Ecco la query SQL per estrarre il primo elemento dell'array spende .
mysql> select details->>'$.spend[0]'
as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Estrai JSON usando Ubiq
Lo strumento Ubiq Reporting supporta tutte le query SQL di cui sopra e semplifica la visualizzazione dei risultati SQL in diversi modi. Ecco la prima query SQL menzionata sopra, in Ubiq.
Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!