2013-01-09 7 views
7

मैं MongoDB से कनेक्ट करने के लिए PHP का उपयोग कर रहा हूं। मेरा कोड इस प्रकार है।php MongoCursor से JSON डेटा कैसे वापस करें

// connect 
$m = new MongoClient($con_string); // connect to a remote host at a given port 
$db = $m->main; 

$customers = $db->customer->find(); 

मैं अपने HTML करने के लिए $ ग्राहकों संग्रह json दस्तावेज़ के रूप में वापसी करना चाहते हैं। मैं यह कैसे कर सकता हूँ? उनके __toString() तरीकों सही ढंग से लागू के प्रतिनिधित्व वापस लाने के लिए होना चाहिए

foreach($customers as $k => $row){ 
    echo json_encode($row); 
} 

MongoDBs वस्तुओं में से प्रत्येक:

+2

'foreach ($ ग्राहकों $ कश्मीर के रूप में => $ है के रूप में

$result = Array(); foreach ($customers as $entry) { array_push($result, $entry); } echo json_encode($result, true); 

ही परिणाम पैदा करता है पंक्ति) {$ नया [] = json_encode ($ पंक्ति); } 'आपको ऑब्जेक्ट प्रकारों को शुद्ध स्ट्रिंग में पहले कनवर्ट करने की आवश्यकता हो सकती है, हालांकि' MongoId' – Sammaye

उत्तर

15

आप इस दो तरीकों कर सकते हैं:

echo json_encode(iterator_to_array($customers)); 

या आप मैन्युअल रूप से यह स्क्रॉल कर सकते हैं महत्व।

8

यह भी काम करेगा। और आप अपने जेसन को भी कस्टमाइज़ कर सकते हैं।

$arr = array(); 

    foreach($customers as $c) 
    { 
     $temp = array("name" => $c["name"], "phone" => $c["phone"], 
              "address" => $c["address"]); 
     array_push($arr, $temp); 
    } 

    echo json_encode($arr); 
+1

की तरह यह समाधान बेहतर है क्योंकि यह कॉम को जेसन में जोड़ता है .. +1 – ianaz

+0

@ianaz क्या कॉमा? – Sammaye

+0

@ianaz कॉमा जो एकाधिक मानों को संग्रह से अलग करता है। – Jack

3

अन्य उत्तर काम करते हैं, लेकिन यह पता चला है कि उत्पन्न JSON निम्न प्रपत्र (इस उदाहरण में मैं अपने ग्राहकों के लिए एक काल्पनिक "नाम" फ़ील्ड का उपयोग करें) होगा अच्छा है:

{ 
    "5587d2c3cd8348455b26feab": { 
     "_id": { 
      "$id": "5587d2c3cd8348455b26feab" 
     }, 
     "name": "Robert" 
    }, 
    "5587d2c3cd8348455b26feac": { 
     "_id": { 
      "$id": "5587d2c3cd8348455b26feac" 
     }, 
     "name": "John" 
    } 
} 

इसलिए यदि आप ऑब्जेक्ट _id अपनी प्रत्येक ऑब्जेक्ट ऑब्जेक्ट्स की कुंजी नहीं चाहते हैं तो आप पैरामीटर iterator_to_array पर पैरामीटर जोड़ सकते हैं। आपका कोड होगा:

echo json_encode(iterator_to_array($customers, false), true); 

यह जो JSON की एक सरणी वस्तुओं

[ 
    { 
     "_id": { 
      "$id": "5587d2c3cd8348455b26feab" 
     }, 
     "name": "Robert" 
    }, 
    { 
     "_id": { 
      "$id": "5587d2c3cd8348455b26feac" 
     }, 
     "name": "John" 
    } 
]