Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przeszukiwać kolumnę JSON w MySQL

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ś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie impasów w MySQL i PostgreSQL

  2. Eksportuj bazę danych MySQL/MariaDB

  3. Mysql, aby wybrać rekord miesięczny, nawet jeśli dane nie istnieją

  4. BŁĄD 1044 (42000):Odmowa dostępu dla użytkownika „@”localhost” do bazy danych „db”

  5. Jak wdrożyć bazę danych Chamilo MySQL w celu zapewnienia wysokiej dostępności