MySQL

2017-01-20 4 views
8

में परिणाम तालिका को JSON सरणी में कनवर्ट करने के लिए कैसे करें I अधिमानतः केवल सादा MySQL कमांड का उपयोग करके परिणाम तालिका को JSS सरणी में MySQL में कनवर्ट करना चाहते हैं। क्वेरीMySQL

SELECT name, phone FROM person; 

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

साथ उदाहरण के लिए उम्मीद JSON उत्पादन होगा

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

वहाँ ऐसा करने के लिए है कि सादा MySQL में रास्ता नहीं है?

संपादित करें:

कुछ जवाब कैसे उदा के साथ ऐसा कर रहे हैं MySQL and PHP, लेकिन मुझे शुद्ध MySQL समाधान नहीं मिला।

+0

ठीक है, लेकिन आप ऐसा क्यों करना चाहते हैं? – Strawberry

+0

GROUP_CONCAT और CONCAT –

+0

का संयोजन आप इस क्वेरी को कैसे चला रहे हैं? – Schwern

उत्तर

7

@Schwern से सहायता के साथ मैं इस प्रश्न को प्रस्तुत करने में कामयाब रहा, जो काम करता है!

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

और जब इस क्वेरी झंडे mysql -N -s साथ कमांड लाइन से चलाया जाता है, हेडर और ग्रिड परिणाम से हटा दिया जाता है और उत्पादन सादा JSON सारणी है।

+2

यदि आप mysql क्लाइंट का उपयोग कर रहे हैं, [आप इसके बजाय '--json' का उपयोग कर सकते हैं] (https://dev.mysql.com/doc/refman/5.7/en/mysql-shell-json-output.html) तो यह किसी भी प्रश्न पर काम करेगा। – Schwern

+1

ओह, वाह। टिप के लिए धन्यवाद, @Schwern! – ronkot

9

आप JSON ऑब्जेक्ट्स के रूप में पंक्तियां प्राप्त करने के लिए json_object का उपयोग कर सकते हैं।

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

यह उन्हें एक सरणी में नहीं रखेगा, या उनके बीच अल्पविराम डालेगा। आपको उस कोड में ऐसा करना होगा जो उन्हें ला रहा है।

+0

के लिए काम करता है धन्यवाद, यह पहले से ही बहुत करीब है! मैं अभी भी इन ऑब्जेक्ट से सरणी बनाने के तरीके पर प्रयोग कर रहा हूं। – ronkot

+0

मुझे यह 'त्रुटि 1305 (42000) मिला: FUNCTION mydb.JSON_OBJECT मौजूद नहीं है' त्रुटि। मैं यह कैसे सुनिश्चित कर सकता हूं कि यह कार्य मौजूद है? –

+0

@ एंथनीकॉन्ग आप किस संस्करण का उपयोग कर रहे हैं? 'json_object' का उपयोग केवल' 5.7' और उच्चतम में किया जा सकता है .. –