sql >> Database >  >> RDS >> Mysql

Hoe een JSON-kolom op te vragen in MySQL

Soms moet u mogelijk JSON-array met objecten doorzoeken, JSON-gegevens extraheren of JSON-gegevens ophalen in MySQL. In dit artikel zullen we bekijken hoe u de JSON-kolom in MySQL kunt opvragen.


JSON-kolom opvragen in MySQL

Stel dat u de volgende tabel users(id, details) . heeft waar id is een geheel getal en primaire sleutel terwijl details is een JSON-gegevenstypekolom.

create table users(
    id int auto_increment primary key,
    details json
   );

We zullen de volgende JSON-gegevens in onze tabel invoegen.

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 } }'
);


Hoe gegevens op te halen uit de JSON-kolom in MySQL

MySQL biedt twee operators ( -> en ->> ) om gegevens uit JSON-kolommen te extraheren.

->> krijgt de tekenreekswaarde terwijl -> waarde zonder aanhalingstekens zal ophalen.

Hier is de SQL-query om de browsernaam te extraheren uit details kolom

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     |
+----+--------------+--------------+

Zoals je kunt zien ->> geeft uitvoer terug als tekenreeksen tussen aanhalingstekens, terwijl -> waarden retourneert zoals ze zijn.

U kunt deze operators ook gebruiken in de WHERE-component, zoals hieronder weergegeven.

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      |
+----+--------------+--------------+

Als u resolution.x wilt ophalen waarde, dat wil zeggen van een object, dan kunt u dit doen met de punt (.) operator, zoals hieronder weergegeven.

mysql> select details->'$.resolution.x' as  width
       from users;
+----+-----------+
| id |  width    |
+----+-----------+
|  1 | 1920      |
|  2 | 1680      |
|  3 | 1280      |
+----+-----------+

Evenzo, als u een array-element uit een JSON wilt extraheren, kunt u ze openen met vierkante haken '[ ]' en de index van het array-element. Hier is de SQL-query om het eerste element van array spend te extraheren .

mysql> select details->>'$.spend[0]' as spend
       from users;
+----+-----------+
| id |  spend    |
+----+-----------+
|  1 | 100       |
|  2 | 150       |
|  3 | 200       |
+----+-----------+


JSON extraheren met Ubiq

Ubiq Reporting-tool ondersteunt alle bovenstaande SQL-query's en maakt het gemakkelijk om SQL-resultaten op verschillende manieren te visualiseren. Hier is de eerste hierboven genoemde SQL-query, in Ubiq.

Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!

  1. het uitvoeren van datetime-gerelateerde bewerkingen in PHP

  2. Normaliseer array-subscripts voor 1-dimensionale array, zodat ze beginnen met 1

  3. Selecteer alleen de tijdstempels van vandaag (sinds middernacht)

  4. Maak een gebruiker aan met alle privileges in Oracle