できればプレーンなMySQLコマンドのみを使用して、MySQLで結果テーブルをJSON配列に変換したいと思います。クエリの例
SELECT name, phone FROM person;
| name | phone |
| Jack | 12345 |
| John | 23455 |
予想されるJSON出力は
[
{
"name": "Jack",
"phone": 12345
},
{
"name": "John",
"phone": 23455
}
]
プレーンMySQLでそれを行う方法はありますか?
編集:
これを行う方法にはいくつかの答えがあります。 MySQLとPHP ですが、純粋なMySQLソリューションが見つかりませんでした。
新しいソリューション:
すばらしいコメントを使用して構築、ありがとう!
SELECT JSON_ARRAYAGG(JSON_OBJECT('name', name, 'phone', phone)) from Person;
古いソリューション:
@Schwernの助けを借りて、このクエリをなんとかすることができました。
SELECT CONCAT(
'[',
GROUP_CONCAT(JSON_OBJECT('name', name, 'phone', phone)),
']'
)
FROM person;
json_object を使用して、行をJSONオブジェクトとして取得できます。
SELECT json_object('name', name, 'phone', phone)
FROM person;
これは、それらを配列に入れたり、それらの間にコンマを入れたりしません。それらを取得するコードでそれを行う必要があります。
(コメントの1つで言うように)コンソールでクエリを実行している場合、 MySql Shell をインストールすると、クエリの結果をjsonとして出力できるようになります。
JSONにはjson_arrayagg、json_objectaggという2つの「グループ化」関数があります。
この問題は次の方法で解決できます。
SELECT json_arrayagg( json_merge( json_object('name', name), json_object('phone', phone) ) ) FROM person;
これにはMySQL 5.7+が必要です。