sql >> Databasteknik >  >> RDS >> Mysql

Hur man frågar JSON-kolumn i MySQL

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!

  1. Akta dig för vilseledande data från SET STATISTICS IO

  2. Analysera parameterns standardvärden med PowerShell – Del 3

  3. SQLite grupperar efter/antal timmar, dagar, veckor, år

  4. MySQL gå med i where-klausulen