Soms moet u mogelijk JSON-array met objecten doorzoeken, JSON-gegevens extraheren of JSON-gegevens ophalen in MySQL. In dit artikel zullen we bekijken hoe u de JSON-kolom in MySQL kunt opvragen.
JSON-kolom opvragen in MySQL
Stel dat u de volgende tabel users(id, details) . heeft waar id is een geheel getal en primaire sleutel terwijl details is een JSON-gegevenstypekolom.
create table users(
id int auto_increment primary key,
details json
); We zullen de volgende JSON-gegevens in onze tabel invoegen.
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 } }'
);
Hoe gegevens op te halen uit de JSON-kolom in MySQL
MySQL biedt twee operators ( -> en ->> ) om gegevens uit JSON-kolommen te extraheren.
->> krijgt de tekenreekswaarde terwijl -> waarde zonder aanhalingstekens zal ophalen.
Hier is de SQL-query om de browsernaam te extraheren uit details kolom
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 |
+----+--------------+--------------+ Zoals je kunt zien ->> geeft uitvoer terug als tekenreeksen tussen aanhalingstekens, terwijl -> waarden retourneert zoals ze zijn.
U kunt deze operators ook gebruiken in de WHERE-component, zoals hieronder weergegeven.
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 |
+----+--------------+--------------+ Als u resolution.x wilt ophalen waarde, dat wil zeggen van een object, dan kunt u dit doen met de punt (.) operator, zoals hieronder weergegeven.
mysql> select details->'$.resolution.x' as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+ Evenzo, als u een array-element uit een JSON wilt extraheren, kunt u ze openen met vierkante haken '[ ]' en de index van het array-element. Hier is de SQL-query om het eerste element van array spend te extraheren .
mysql> select details->>'$.spend[0]' as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
JSON extraheren met Ubiq
Ubiq Reporting-tool ondersteunt alle bovenstaande SQL-query's en maakt het gemakkelijk om SQL-resultaten op verschillende manieren te visualiseren. Hier is de eerste hierboven genoemde SQL-query, in Ubiq.
Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!