Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment interroger la colonne JSON dans MySQL

Parfois, vous devrez peut-être rechercher un tableau d'objets JSON, extraire des données JSON ou récupérer des données JSON dans MySQL. Dans cet article, nous verrons comment interroger la colonne JSON dans MySQL.


Comment interroger la colonne JSON dans MySQL

Disons que vous avez la table suivante users(id, details)id est un entier et une clé primaire tandis que détails est une colonne de type de données JSON.

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

Nous allons insérer les données JSON suivantes dans notre table.

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


Comment récupérer les données de la colonne JSON dans MySQL

MySQL fournit deux opérateurs ( -> et ->> ) pour extraire les données des colonnes JSON.

->> obtiendra la valeur de la chaîne tandis que -> récupérera la valeur sans les guillemets.

Voici la requête SQL pour extraire le nom du navigateur des détails colonne

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

Comme vous pouvez le voir ->> renvoie la sortie sous forme de chaînes entre guillemets, tandis que -> renvoie les valeurs telles qu'elles sont.

Vous pouvez également utiliser ces opérateurs dans la clause WHERE comme indiqué ci-dessous.

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

Si vous voulez récupérer resolution.x valeur, c'est-à-dire à partir d'un objet, vous pouvez le faire en utilisant l'opérateur point (.), comme indiqué ci-dessous.

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

De même, si vous souhaitez extraire un élément de tableau d'un JSON, vous pouvez y accéder en utilisant les crochets "[ ]" et l'index de l'élément de tableau. Voici la requête SQL pour extraire le premier élément du tableau spend .

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


Extraire JSON en utilisant Ubiq

L'outil Ubiq Reporting prend en charge toutes les requêtes SQL ci-dessus et facilite la visualisation des résultats SQL de différentes manières. Voici la première requête SQL mentionnée ci-dessus, dans Ubiq.

Besoin d'un outil de reporting pour MySQL ? Ubiq facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !