Melakukan Query Data JSON di DBMS MySQL

MySQL memiliki fitur untuk melakukan operasi / interaksi dengan data JSON

profile of Andika Saputra
· 2 min read · published on

data filtration illustration

MySQL merupakah salah satu RDBMS (Relational Database Management System) yang cukup popular. Karena berbasis tabel, operasi data biasanya akan mengguankan dengan nama kolom dari sebuah tabel.

Namun ada kalanya data yang disimpan di dalam sebuah kolom adalah sebuah JSON. Dan kita diharuskan untuk melakukan operasi terhadap salah satu nilai di dalam JSON tersebut.

Contoh Kasus

Anggaplah kita memiliki sebuah table apps dengan struktur seperti di bawah ini.

+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| name   | varchar(100) | YES  |     | NULL    |                |
| config | json         | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+

* Tipe data JSON bisa menggunakan json atau text

Kemudian diisi data seperti berikut ini

+----+-------+---------------------------------------------------------------------------+
| id | name  | config                                                                    |
+----+-------+---------------------------------------------------------------------------+
|  1 | app a | {"token": "abc", "status": "active", "endpoint": "https://app.com/api"}   |
|  2 | app b | {"token": "def", "status": "suspended", "endpoint": "https://app.io/api"} |
+----+-------+---------------------------------------------------------------------------+

Tentu akan sulit untuk mendapatkan data apps yang status di dalam confignya active. Bisa menggunakan LIKE ataupun SUBSTRING_INDEX, tetapi akan rawan terhadap perubahan data. Begitu juga untuk menampilkan hanya data token dari kolom config, tidak bisa dilakukan jika hanya menggunakan SELECT [name_kolom] seperti biasa.

Solusi

Di dalam MySQL 8, operasi dengan data JSON bisa dilakukan dengan menggunakan nama_kolom->>"$.key_data". Contohnya bisa dilihat seperti di bawah ini.

mysql> select config->>"$.status" as status from apps;
+-----------+
| status    |
+-----------+
| active    |
| suspended |
+-----------+

Atau bisa juga lihat contoh di bawah ini

mysql> select id, name, config->>"$.token" as token
    -> from apps
    -> where config->>"$.status" = 'active';
+----+-------+-------+
| id | name  | token |
+----+-------+-------+
|  1 | app a | abc   |
+----+-------+-------+

Kesimpulan

Operasi data JSON di MySQL saat ini sudah sangat dipermudah, hanya cukup dengan menggunakan syntax kolom->>"$.data" di dalam query.

Fitur ini mulai tersedia di MySQL versi 8 ke atas.