2013-01-09 175 views
7

我正在使用PHP來連接MongoDB。我的代碼如下。如何從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(); 

我想將$ customers集合作爲json文檔返回給我的HTML。我怎樣才能做到這一點?

+2

'的foreach($顧客爲$ K => $行){$ newa [] = json_encode($ row); }'您可能需要先將對象類型轉換爲純字符串,不過像'MongoId' – Sammaye

回答

15

你可以這樣做兩種方式:

echo json_encode(iterator_to_array($customers)); 

,或者你可以通過它手動滾動:

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

每個MongoDBs對象應該有自己的__toString()方法正確實施帶回的代表性價值。

8

這也將工作。你也可以自定義你的json。

$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

這種解決方案更好,因爲它將逗號添加到json。+1 – ianaz

+0

@ianaz什麼是逗號? – Sammaye

+0

@ianaz從逗號分隔多個值的逗號。 – Jack

3

其他答案工作,但它是很好的瞭解,產生的JSON將具有以下形式(在這個例子中,我使用一個假設的「名稱」欄中爲您的客戶):

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

因此,如果您不希望對象_id成爲每個結果對象的關鍵字,則可以將false參數添加到iterator_to_array。 您的代碼將是:

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

這產生了相同的結果

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

是JSON對象的數組

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