Search code examples
mysqljsonetldata-conversion

How to convert result table to JSON array in MySQL


I'd like to convert result table to JSON array in MySQL using preferably only plain MySQL commands. For example with query

SELECT name, phone FROM person;

| name | phone |
| Jack | 12345 |
| John | 23455 |

the expected JSON output would be

[
  {
    "name": "Jack",
    "phone": 12345
  },
  {
    "name": "John",
    "phone": 23455
  }
]

Is there way to do that in plain MySQL?

EDIT:

There are some answers how to do this with e.g. MySQL and PHP, but I couldn't find pure MySQL solution.


Solution

  • New solution:

    Built using Your great comments, thanks!

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

    Old solution:

    With help from @Schwern I managed to put up this query, which seems to work!

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