2013-01-09 35 views
7

Tôi đang sử dụng PHP để kết nối với MongoDB. Mã của tôi là như sau.Cách trả về dữ liệu JSON từ php MongoCursor

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

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

tôi muốn trả lại bộ sưu tập khách hàng $ dưới dạng tài liệu json vào HTML của tôi. Tôi có thể làm cái này như thế nào?

+2

'foreach ($ khách hàng như $ k => $ hàng) {$ newa [] = json_encode ($ row); } 'bạn có thể cần phải chuyển đổi các kiểu đối tượng thành chuỗi thuần đầu tiên mặc dù giống như' MongoId' – Sammaye

Trả lời

15

Bạn có thể làm điều này theo hai cách:

echo json_encode(iterator_to_array($customers)); 

hoặc bạn có thể tự di chuyển qua nó:

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

Mỗi đối tượng MongoDBs nên có __toString() phương pháp của họ thực hiện một cách chính xác để mang lại các đại diện của giá trị.

8

Điều này cũng sẽ hoạt động. Và bạn có thể tùy chỉnh json của bạn là tốt.

$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

giải pháp này tốt hơn vì nó thêm dấu phẩy vào json .. +1 – ianaz

+0

@ianaz Dấu phẩy nào? – Sammaye

+0

@ianaz Dấu phẩy phân tách nhiều giá trị từ bộ sưu tập. – Jack

3

câu trả lời khác làm việc, nhưng nó là tốt để biết rằng JSON được tạo ra sẽ có dạng như sau (trong ví dụ này tôi sử dụng một "tên" giả thuyết trường cho khách hàng của bạn):

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

Vì vậy, trong trường hợp bạn không muốn Object _id là chìa khóa của từng đối tượng kết quả của mình, bạn có thể thêm tham số false vào iterator_to_array. Mã của bạn sẽ là:

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

Điều này tạo ra kết quả tương tự như

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

đó là một loạt các đối tượng JSON

[ 
    { 
     "_id": { 
      "$id": "5587d2c3cd8348455b26feab" 
     }, 
     "name": "Robert" 
    }, 
    { 
     "_id": { 
      "$id": "5587d2c3cd8348455b26feac" 
     }, 
     "name": "John" 
    } 
] 
Các vấn đề liên quan