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!