2013-01-09 16 views
7

Sto usando PHP per connettermi con MongoDB. Il mio codice è il seguente.Come restituire i dati JSON da php MongoCursor

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

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

Voglio restituire la raccolta di $ clienti come documento json al mio HTML. Come posso fare questo?

+2

'foreach ($ clienti da $ k => $ riga) {$ newa [] = json_encode ($ row); } 'potrebbe essere necessario convertire prima i tipi di oggetto in stringa pura, anche se come il' MongoId' – Sammaye

risposta

15

Si può fare in due modi:

echo json_encode(iterator_to_array($customers)); 

o è possibile scorrere manualmente attraverso di essa:

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

Ognuno di oggetti MongoDBs dovrebbero avere i loro __toString() metodi correttamente implementati per riportare la rappresentazione della il valore.

8

Anche questo funzionerà. E puoi anche personalizzare il tuo 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

questa soluzione è migliore perché aggiunge la virgola a json .. +1 – ianaz

+0

@ianaz Quale virgola? – Sammaye

+0

@ianaz La virgola che separa più valori dalla raccolta. – Jack

3

altre risposte funzionano, ma è bene sapere che il JSON generato avrà il seguente modulo (in questo esempio io uso un "nome" ipotetico campo per i vostri clienti):

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

Pertanto, se non si desidera che l'oggetto _id sia la chiave di ciascun oggetto risultato, è possibile aggiungere un parametro false a iterator_to_array. Il tuo codice sarebbe:

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

Questo crea lo stesso risultato

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

, che è un array di JSON oggetti

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