Někdy můžete potřebovat prohledat pole JSON objektů, extrahovat data JSON nebo načíst data JSON v MySQL. V tomto článku se podíváme na to, jak dotazovat sloupec JSON v MySQL.
Jak dotazovat sloupec JSON v MySQL
Řekněme, že máte následující tabulku uživatelé(id, podrobnosti) kde id je celé číslo a primární klíč, zatímco podrobnosti je sloupec datového typu JSON.
create table users(
id int auto_increment primary key,
details json
); Do naší tabulky vložíme následující data JSON.
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 } }'
);
Jak načíst data ze sloupce JSON v MySQL
MySQL poskytuje dva operátory ( -> a ->> ) pro extrakci dat ze sloupců JSON.
->> získá hodnotu řetězce, zatímco -> načte hodnotu bez uvozovek.
Zde je dotaz SQL pro extrahování názvu prohlížeče z podrobností sloupec
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 |
+----+--------------+--------------+ Jak můžete vidět ->> vrací výstup jako řetězce v uvozovkách, zatímco -> vrací hodnoty tak, jak jsou.
Tyto operátory můžete také použít v klauzuli WHERE, jak je uvedeno níže.
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 |
+----+--------------+--------------+ Pokud chcete načíst resolution.x hodnotu, to znamená z objektu, můžete tak učinit pomocí operátoru tečka (.), jak je znázorněno níže.
mysql> select details->'$.resolution.x' as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+ Podobně, pokud chcete extrahovat prvek pole z JSON, můžete k nim přistupovat pomocí hranatých závorek „[ ]“ a indexu prvku pole. Zde je dotaz SQL pro extrahování prvního prvku pole spend .
mysql> select details->>'$.spend[0]' as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Extrahujte JSON pomocí Ubiq
Nástroj Ubiq Reporting podporuje všechny výše uvedené SQL dotazy a usnadňuje vizualizaci výsledků SQL různými způsoby. Zde je první SQL dotaz zmíněný výše v Ubiq.
Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!