2015-01-28 22 views
17

Ho questo codicefunzione json_encode non restituisce parentesi graffe {} quando array è vuoto in php

$status = array(
       "message"=>"error", 
       "club_id"=>$_club_id, 
       "status"=>"1", 
       "membership_info"=>array(), 
       ); 

echo json_encode($status);

Questa JSON funzione di ritorno:
{"message":"error","club_id":275,"status":"1","membership_info":[]}

Ma ho bisogno di JSON come questo :

{"message":"error","club_id":275,"status":"1","membership_info":{}}

+1

è così che JSON rappresenta un array. [] sta per un array in Json –

+1

Qual è il problema con il formato corrente? –

+0

Questo è il formato json corretto. Gli array sono racchiusi tra parentesi graffe - "[]". –

risposta

29

ricorrere alla possibilità di json_encodeJSON_FORCE_OBJECT:

json_encode($status, JSON_FORCE_OBJECT); 

Documentation

JSON_FORCE_OBJECT (intero) Uscite un oggetto anziché una matrice quando si utilizza una matrice non associativo. Particolarmente utile quando il destinatario dell'output si aspetta un oggetto e l'array è vuoto. Disponibile da PHP 5.3.0.

Oppure,

$status = array(
       "message"=>"error", 
       "club_id"=>$_club_id, 
       "status"=>"1", 
       "membership_info"=> new stdClass() 
       ); 

sarà anche fare il trucco.

6

Non c'è differenza in PHP tra un array e un "oggetto" (nel senso JSON della parola). Se si desidera forzare la codifica di tutti gli array come oggetti JSON, impostare il flag JSON_FORCE_OBJECT, disponibile da PHP 5.3. Vedi http://php.net/json_encode. Si noti che questo si applica a tutti gli array.

In alternativa si potrebbe effettivamente utilizzare oggetti nel codice PHP invece di array:

$data = new stdClass; 
$data->foo = 'bar'; 
... 

Forse è più semplice per gestire il caso limite di array vuoti sul lato client.

5
$status = array(
       "message"=>"error", 
       "club_id"=>$_club_id, 
       "status"=>"1", 
       "membership_info"=>(object) array(), 
       ); 

Lanciando l'array in un oggetto, json_encode sarà sempre utilizzare parentesi invece di staffe per il valore (anche quando è vuoto).

Ciò è utile quando non è possibile utilizzare JSON_FORCE_OBJECT e quando non è possibile (o non si desidera) utilizzare un oggetto reale per il valore.