web-dev-qa-db-fra.com

Comment convertir une table de résultats en un tableau JSON dans MySQL

J'aimerais convertir la table de résultats en un tableau JSON dans MySQL en utilisant de préférence uniquement des commandes MySQL simples. Par exemple avec une requête

SELECT name, phone FROM person;

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

la sortie JSON attendue serait

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

Y a-t-il moyen de faire cela en clair avec MySQL?

MODIFIER:

Il y a quelques réponses pour faire cela avec, par exemple. MySQL et PHP , mais je n’ai pas trouvé de solution MySQL pure.

21
ronkot

Vous pouvez utiliser json_object pour obtenir des lignes en tant qu’objets JSON.

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

Cela ne les mettra pas dans un tableau ou ne placera pas de virgules entre eux. Vous devrez le faire dans le code qui les récupère.

27
Schwern

Avec l'aide de @Schwern, j'ai réussi à poser cette requête, qui semble fonctionner!

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

Si vous exécutez vos requêtes dans la console (comme vous le dites dans l'un des commentaires), installez MySql Shell et vous pourrez afficher les résultats des requêtes au format json.

2
anche

Il existe deux fonctions "groupe par" pour JSON, appelées json_arrayagg, json_objectagg.

Ce problème peut être résolu avec:

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

Cela nécessite MySQL 5.7+.

1
mikeryder