web-dev-qa-db-ja.com

MySQLで結果テーブルをJSON配列に変換する方法

できればプレーンな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ソリューションが見つかりませんでした。

31
ronkot

新しいソリューション:

すばらしいコメントを使用して構築、ありがとう!

SELECT JSON_ARRAYAGG(JSON_OBJECT('name', name, 'phone', phone)) from Person;

古いソリューション:

@Schwernの助けを借りて、このクエリをなんとかすることができました。

SELECT CONCAT(
    '[', 
    GROUP_CONCAT(JSON_OBJECT('name', name, 'phone', phone)),
    ']'
) 
FROM person;
35
ronkot

json_object を使用して、行をJSONオブジェクトとして取得できます。

SELECT json_object('name', name, 'phone', phone)
FROM person;

これは、それらを配列に入れたり、それらの間にコンマを入れたりしません。それらを取得するコードでそれを行う必要があります。

30
Schwern

(コメントの1つで言うように)コンソールでクエリを実行している場合、 MySql Shell をインストールすると、クエリの結果をjsonとして出力できるようになります。

3
anche

JSONにはjson_arrayagg、json_objectaggという2つの「グループ化」関数があります。

この問題は次の方法で解決できます。

SELECT json_arrayagg( json_merge( json_object('name', name), json_object('phone', phone) ) ) FROM person;

これにはMySQL 5.7+が必要です。

2
mikeryder