IT二刀流にはプロモーションが含まれています。

MySQLでSELECT結果をJSONで取得する

MYSQLロゴ

MySQLやMariaDBでSELECT結果をJSONで取得する方法です。

最近はフロントとバックエンドを分けてAPI方式でJSONでデータを返すことも多いのでJSONで取得できると便利です。

サンプルデータ

下記のテーブルを使用してSQLでJSON取得します。

> SELECT * FROM food;
+----+------------+--------------+
| id | category   | name         |
+----+------------+--------------+
|  1 | vegetables | キャベツ     |
|  2 | vegetables | レタス       |
|  3 | vegetables | 人参         |
|  4 | vegetables | トマト       |
|  5 | vegetables | スイカ       |
|  6 | fruits     | リンゴ       |
|  7 | fruits     | 桃           |
|  8 | fruits     | イチゴ       |
|  9 | fruits     | ゴーヤ       |
| 10 | fruits     | メロン       |
+----+------------+--------------+
10 rows in set (0.001 sec)

JSONで値を取得

レコードをJSONで取得する

レコードをJSONで取得します。

JSON_OBJECT([key, val[, key, val] …])を使用します。

> SELECT JSON_OBJECT("category", category, "name", name) AS food FROM food;
+----------------------------------------------------+
| food                                               |
+----------------------------------------------------+
| {"category": "vegetables", "name": "キャベツ"}     |
| {"category": "vegetables", "name": "レタス"}       |
| {"category": "vegetables", "name": "人参"}         |
| {"category": "vegetables", "name": "トマト"}       |
| {"category": "vegetables", "name": "スイカ"}       |
| {"category": "fruits", "name": "リンゴ"}           |
| {"category": "fruits", "name": "桃"}               |
| {"category": "fruits", "name": "イチゴ"}           |
| {"category": "fruits", "name": "ゴーヤ"}           |
| {"category": "fruits", "name": "メロン"}           |
+----------------------------------------------------+
10 rows in set (0.001 sec)

category毎にJSONデータを配列で取得

category毎にJSONデータを配列で取得します。

GROUP BYでまとめて、値をJSON_ARRAYAGG()で配列にします。

ORDER BYを使用すると配列内の並び替えもできます。

> SELECT category, JSON_ARRAYAGG(JSON_OBJECT("name", name) ORDER BY id) AS foods FROM food GROUP BY category;
+------------+-----------------------------------------------------------------------------------------------------------------+
| category   | foods                                                                                                           |
+------------+-----------------------------------------------------------------------------------------------------------------+
| fruits     | [{"name": "リンゴ"},{"name": "桃"},{"name": "イチゴ"},{"name": "ゴーヤ"},{"name": "メロン"}]                    |
| vegetables | [{"name": "キャベツ"},{"name": "レタス"},{"name": "人参"},{"name": "トマト"},{"name": "スイカ"}]                |
+------------+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.001 sec)

まとめ

JSONでのデータのやり取りが多くなっているので、SQLでJSONを生成できるのは便利です。

コードもすっきりするので可読性も上がります。

もうSQLも1つの言語として履歴書に書いてもいいのでは?

ハイレベルでSQLが書けるってすごいのに、なぜか軽視されがちです。

ITエンジニアの転職

いまITエンジニアの需要は急拡大しています。
ITエンジニアの経験があれば好条件で転職することも難しくありません。

転職ドラフト

☆ 支援ご協力のお願い ☆

この記事が「役に立った」と感じたら

投げ銭の「OFUSEで応援」で支援して頂けたら励みになります!

OFUSEのやり方(説明)

関連記事
記事特集