webentwicklung-frage-antwort-db.com.de

Wie konvertiert man eine Ergebnistabelle in ein JSON-Array in MySQL?

Ich möchte die Ergebnistabelle in MySQL in ein JSON-Array konvertieren, wobei vorzugsweise nur einfache MySQL-Befehle verwendet werden. Zum Beispiel mit Abfrage

SELECT name, phone FROM person;

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

die erwartete JSON-Ausgabe wäre

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

Gibt es eine Möglichkeit, dies in einfachem MySQL zu tun?

BEARBEITEN:

Es gibt einige Antworten, wie dies mit z. MySQL und PHP , aber ich konnte keine reine MySQL-Lösung finden.

21
ronkot

Sie können json_object verwenden, um Zeilen als JSON-Objekte abzurufen.

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

Dies setzt sie nicht in ein Array oder Kommas zwischen ihnen. Sie müssen das im Code tun, der sie abruft.

27
Schwern

Mit Hilfe von @Schwern ist es mir gelungen, diese Abfrage zu stellen, was anscheinend funktioniert!

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

Wenn Sie Ihre Abfragen in der Konsole ausführen (wie Sie in einem der Kommentare sagen), installieren Sie MySql Shell und Sie können die Ergebnisse der Abfragen als json ausgeben.

2
anche

Es gibt zwei "group by" -Funktionen für JSON mit dem Namen json_arrayagg, json_objectagg.

Dieses Problem kann gelöst werden mit:

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

Dies erfordert MySQL 5.7 und höher.

1
mikeryder