Ibland kan du behöva söka i JSON-array av objekt, extrahera JSON-data eller hämta JSON-data i MySQL. I den här artikeln kommer vi att titta på hur man frågar JSON-kolumnen i MySQL.
Hur man frågar JSON-kolumn i MySQL
Låt oss säga att du har följande tabell users(id, details) där id är ett heltal och primärnyckel medan detaljer är en kolumn för JSON-datatyp.
create table users( id int auto_increment primary key, details json );
Vi kommer att infoga följande JSON-data i vår tabell.
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 } }' );
Hur man hämtar data från JSON-kolumnen i MySQL
MySQL tillhandahåller två operatorer ( -> och ->> ) för att extrahera data från JSON-kolumner.
->> får strängvärdet medan -> hämtar värde utan citattecken.
Här är SQL-frågan för att extrahera webbläsarnamn från detaljer kolumn
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 | +----+--------------+--------------+
Som du kan se ->> returnerar utdata som citattecken, medan -> returnerar värden som de är.
Du kan också använda dessa operatorer i WHERE-satsen som visas nedan.
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 | +----+--------------+--------------+
Om du vill hämta resolution.x värde, det vill säga från ett objekt, då kan du göra det med operatorn punkt (.), som visas nedan.
mysql> select details->'$.resolution.x'
as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+
På liknande sätt, om du vill extrahera ett array-element från en JSON, kan du komma åt dem med hakparenteser "[ ]" och index för array-element. Här är SQL-frågan för att extrahera det första elementet i arrayen spend .
mysql> select details->>'$.spend[0]'
as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Extrahera JSON med Ubiq
Ubiqs rapporteringsverktyg stöder alla ovanstående SQL-frågor och gör det enkelt att visualisera SQL-resultat på olika sätt. Här är den första SQL-frågan som nämns ovan, i Ubiq.
Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!