Nogle gange skal du muligvis søge i JSON-array af objekter, udtrække JSON-data eller hente JSON-data i MySQL. I denne artikel vil vi se på, hvordan man forespørger JSON-kolonnen i MySQL.
Sådan forespørges JSON-kolonnen i MySQL
Lad os sige, at du har følgende tabel brugere(id, detaljer) hvor id er et heltal og primær nøgle mens detaljer er en JSON-datatypekolonne.
create table users(
id int auto_increment primary key,
details json
); Vi indsætter følgende JSON-data i vores tabel.
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 } }'
);
Sådan hentes data fra JSON-kolonnen i MySQL
MySQL giver to operatorer (-> og ->>) til at udtrække data fra JSON-kolonner.
->> får strengværdien, mens -> henter værdi uden anførselstegn.
Her er SQL-forespørgslen til at udtrække browsernavn fra detaljer kolonne
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 |
+----+--------------+--------------+ Som du kan se ->> returnerer output som citerede strenge, mens -> returnerer værdier, som de er.
Du kan også bruge disse operatorer i WHERE-sætningen som vist nedenfor.
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 |
+----+--------------+--------------+ Hvis du vil hente resolution.x værdi, det vil sige fra et objekt, så kan du gøre det ved at bruge prik (.) operatoren, som vist nedenfor.
mysql> select details->'$.resolution.x' as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+ Tilsvarende, hvis du vil udtrække et array-element fra en JSON, kan du få adgang til dem ved hjælp af firkantede parenteser '[ ]' og indeks for array-element. Her er SQL-forespørgslen til at udtrække det første element af array spend .
mysql> select details->>'$.spend[0]' as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Udtræk JSON ved hjælp af Ubiq
Ubiq Reporting-værktøj understøtter alle ovenstående SQL-forespørgsler og gør det nemt at visualisere SQL-resultater på forskellige måder. Her er den første SQL-forespørgsel nævnt ovenfor, i Ubiq.
Har du brug for et rapporteringsværktøj til MySQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!