Czasami może być konieczne przeszukanie tablicy obiektów JSON, wyodrębnienie danych JSON lub pobranie danych JSON w MySQL. W tym artykule przyjrzymy się, jak odpytywać kolumnę JSON w MySQL.
Jak przeszukiwać kolumnę JSON w MySQL
Załóżmy, że masz następującą tabelę użytkownicy (identyfikator, szczegóły) gdzie id jest liczbą całkowitą i kluczem podstawowym, podczas gdy szczegóły to kolumna typu danych JSON.
create table users(
id int auto_increment primary key,
details json
); Wstawimy następujące dane JSON do naszej tabeli.
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 pobrać dane z kolumny JSON w MySQL
MySQL udostępnia dwa operatory ( -> i ->> ) do wyodrębniania danych z kolumn JSON.
->> pobierze wartość ciągu, podczas gdy -> pobierze wartość bez cudzysłowów.
Oto zapytanie SQL do wyodrębnienia nazwy przeglądarki ze szczegółów kolumna
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 widać ->> zwraca dane wyjściowe jako ciągi w cudzysłowie, podczas gdy -> zwraca wartości takie, jakie są.
Możesz również użyć tych operatorów w klauzuli WHERE, jak pokazano poniżej.
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 |
+----+--------------+--------------+ Jeśli chcesz pobrać rozdzielczość.x wartość, czyli z obiektu, możesz to zrobić za pomocą operatora kropki (.), jak pokazano poniżej.
mysql> select details->'$.resolution.x' as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+ Podobnie, jeśli chcesz wyodrębnić element tablicy z JSON, możesz uzyskać do niego dostęp za pomocą nawiasów kwadratowych „[ ]” i indeksu elementu tablicy. Oto zapytanie SQL do wyodrębnienia pierwszego elementu tablicy spend .
mysql> select details->>'$.spend[0]' as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Wyodrębnij JSON za pomocą Ubiq
Narzędzie Ubiq Reporting obsługuje wszystkie powyższe zapytania SQL i ułatwia wizualizację wyników SQL na różne sposoby. Oto pierwsze zapytanie SQL, o którym mowa powyżej, w Ubiq.
Potrzebujesz narzędzia do raportowania dla MySQL? Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!