Manchmal müssen Sie möglicherweise ein JSON-Array von Objekten durchsuchen, JSON-Daten extrahieren oder JSON-Daten in MySQL abrufen. In diesem Artikel sehen wir uns an, wie man JSON-Spalten in MySQL abfragt.
So fragen Sie die JSON-Spalte in MySQL ab
Nehmen wir an, Sie haben die folgende Tabelle users(id, details) wo id ist eine Ganzzahl und ein Primärschlüssel, während Details ist eine Spalte vom JSON-Datentyp.
create table users( id int auto_increment primary key, details json );
Wir werden die folgenden JSON-Daten in unsere Tabelle einfügen.
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 } }' );
So rufen Sie Daten aus der JSON-Spalte in MySQL ab
MySQL stellt zwei Operatoren ( -> und ->> ) bereit, um Daten aus JSON-Spalten zu extrahieren.
->> erhält den Stringwert, während -> den Wert ohne Anführungszeichen holt.
Hier ist die SQL-Abfrage zum Extrahieren des Browsernamens aus Details Spalte
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 | +----+--------------+--------------+
Wie Sie sehen können, gibt ->> die Ausgabe als Zeichenfolgen in Anführungszeichen zurück, während -> die Werte so zurückgibt, wie sie sind.
Sie können diese Operatoren auch in der WHERE-Klausel verwenden, wie unten gezeigt.
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 | +----+--------------+--------------+
Wenn Sie resolution.x abrufen möchten Wert, d. h. von einem Objekt, können Sie dies mit dem Punktoperator (.) tun, wie unten gezeigt.
mysql> select details->'$.resolution.x'
as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+
Wenn Sie ein Array-Element aus einem JSON extrahieren möchten, können Sie auf ähnliche Weise mit eckigen Klammern „[ ]“ und dem Index des Array-Elements darauf zugreifen. Hier ist die SQL-Abfrage zum Extrahieren des ersten Elements des Arrays spend .
mysql> select details->>'$.spend[0]'
as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
JSON mit Ubiq extrahieren
Das Ubiq Reporting Tool unterstützt alle oben genannten SQL-Abfragen und macht es einfach, SQL-Ergebnisse auf unterschiedliche Weise zu visualisieren. Hier ist die erste oben erwähnte SQL-Abfrage in Ubiq.
Benötigen Sie ein Reporting-Tool für MySQL? Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!