2013-03-21 16 views
21

Quando si cerca di accedere a un'API l'array JSON deve essere analizzato come questonessuna staffa di JSON piazza gamma

{"item":[{"id":"123456", "name":"adam"}]} 

Ma quando sto facendo il seguente codice

$data = array("item" => array("id" => "123456", "name" => "adam")); 
echo json_encode($data); 

restituisce l'array JSON senza parentesi quadre come segue

{"item":{"id":"123456","name":"adam"}} 

Ho passato ore a cercare di capire come risolvere questo e j ust non può pensare ad una soluzione

risposta

44

È necessario avvolgere le cose in un altro array:

$data = array("item" => array(array("id" => "123456", "name" => "adam"))); 

questo sarà più comprensibile se si usa l'equivalente di PHP 5.4 gamma sintassi:

$data = [ "item" => [ ["id" => "123456", "name" => "adam"] ] ]; 

Confronta questo con il JSON:

 { "item": [ {"id":"123456", "name":"adam"  } ] } 

L'unica cosa da spiegare s perché uno degli array PHP rimane un array [] in JSON mentre gli altri due vengono convertiti in un oggetto {}. Ma il documentation fa già così:

Quando codifica un array, se le chiavi non sono una continua sequenza numerica partendo da 0, tutte le chiavi sono codificati come stringhe, e specificati esplicitamente per ogni coppia di valori-chiave.

+0

Quando si utilizza quel codice come previsto, mette le parentesi quadre al di fuori di tutto invece che all'interno di 'item'? –

+0

@CurtisCrewe: Siamo spiacenti, errore di battitura. Risolto ora. – Jon

+0

Grazie, ha funzionato perfettamente! –

6

Prima di leggere questo post, ho avuto questo:

echo json_encode($data);

Dopo aver letto questo post:

echo json_encode(array($data)); 

staffe apparso su l'inizio e la fine del oggetto JSON.

:)

+0

Non so perché il downvote perché ha funzionato per me (+1). –

+0

Utile, ma se vuoi le parentesi negli array di dati, usa solo qualcosa del tipo: '$ MyArray = array (" something "=> [array (" foo "=>" bar ")]);' –

1

E 'diventato a portata di mano quando si utilizza in questo modo, in modo da poter aggiungere ulteriori elementi sulla matrice

$val = array(); 
$val["id"]="123456"; 
$val["name"]="adam"; 

$data = array(); 
$data["item"][]=$val; 

echo json_encode($data); 

E sarà ouput di seguito:

{ "voce": [ {"id": "123456", "nome": "adam"}]}