2017-01-20 24 views
8

Yalnızca basit MySQL komutlarını kullanarak MySQL içinde sonuç tablosunu JSON dizisine dönüştürmek istiyorum. sorgudaMySQL içinde sonuç tablosu JSON dizisine dönüştürme

SELECT name, phone FROM person; 

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

ile Örneğin beklenen JSON çıktı

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

düz MySQL Bunu yapmanın yolu var mı olurdu?

DÜZENLEME:

ör bunun nasıl bazı cevaplar vardır MySQL and PHP, ancak saf MySQL çözümünü bulamadım.

+0

Tamam, ama neden bunu yapmak istersiniz? – Strawberry

+0

GROUP_CONCAT ve CONCAT –

+0

'un bir bileşimi Bu sorguyu nasıl çalıştırıyorsunuz? – Schwern

cevap

7

@Schwern yardımı ile çalışmayı tercih ettiğim bu sorgulamayı yapmayı başardım! Bu sorgu, bayrakları mysql -N -s komut hattı çalıştırıldığında

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

ve, başlıklar ve ızgaralar sonucu çıkartılır ve çıkış düz JSON dizisidir.

+2

Eğer mysql istemcisini kullanıyorsanız, ['json' yerine] kullanabilirsiniz (https://dev.mysql.com/doc/refman/5.7/en/mysql-shell-json-output.html) sonra herhangi bir sorgu üzerinde çalışacaktır. – Schwern

+1

Oh, vay. İpucu için teşekkürler, @Schwern! – ronkot

9

Satırları JSON nesnesi olarak almak için json_object'u kullanabilirsiniz.

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

Bu, onları bir diziye yerleştirmeyecek veya aralarında virgül koymayacaktır. Bunu, bunları getiren kodda yapmanız gerekecek.

+0

için çalışıyor, teşekkürler bu çok yakın! Hala bu nesneden bir dizi nasıl oluşturulacağını deniyorum. – ronkot

+0

Bu 'ERROR 1305 (42000) var: FUNCTION mydb.JSON_OBJECT yok 'hatası. Bu fonksiyonun varlığını nasıl sağlayabilirim? –

+0

@AnthonyKong hangi sürümü kullanıyorsunuz? json_object sadece 5.7 ve üstü sürümlerde kullanılabilir .. –

İlgili konular