2010-07-19 8 views
74

Sto provando a creare un oggetto JSON da un array PHP. La matrice è simile al seguente:Creare l'oggetto JSON nel modo corretto

$post_data = array('item_type_id' => $item_type, 
    'string_key' => $string_key, 
    'string_value' => $string_value, 
    'string_extra' => $string_extra, 
    'is_public' => $public, 
    'is_public_for_contacts' => $public_contacts); 

Il codice per codificare l'aspetto JSON in questo modo:

$post_data = json_encode($post_data); 

si suppone che il file JSON a guardare come questo, alla fine:

{ 
    "item": { 
     "is_public_for_contacts": false, 
     "string_extra": "100000583627394", 
     "string_value": "value", 
     "string_key": "key", 
     "is_public": true, 
     "item_type_id": 4, 
     "numeric_extra": 0 
    } 
} 

Come posso incapsulare il codice JSON creato nella "voce": {JSON CODE HERE}.

risposta

113

Di solito, si potrebbe fare qualcosa di simile:

$post_data = json_encode(array('item' => $post_data)); 

Ma, a quanto pare si desidera che l'uscita di essere con "{}", è meglio assicurarsi di costringere json_encode() per codificare come oggetto, passando la costante JSON_FORCE_OBJECT.

$post_data = json_encode(array('item' => $post_data), JSON_FORCE_OBJECT); 

"{}" staffe specificare un oggetto e "[]" sono utilizzati per le matrici in base alle specifiche JSON.

+0

vorrei aggiungere il 'JSON_FORCE_OBJECT' in 'json_encode ($ arr, JSON_FORCE_OBJECT)' –

+0

È corretto? $ post_data = json_encode (array ('articolo' => $ post_data), JSON_FORCE_OBJECT); – user339067

+1

Sì ... ma puoi testarlo e dirci se ha funzionato;) – Cristian

18

Hai solo bisogno di un altro livello nella propria matrice PHP:

$post_data = array(
    'item' => array(
    'item_type_id' => $item_type, 
    'string_key' => $string_key, 
    'string_value' => $string_value, 
    'string_extra' => $string_extra, 
    'is_public' => $public, 
    'is_public_for_contacts' => $public_contacts 
) 
); 

echo json_encode($post_data); 
+0

Proprio quello di cui avevo bisogno, grazie – Setrino

25

Anche se le altre risposte postato qui lavorano, ho trovato il seguente approccio più naturale:

$obj = (object) [ 
    'aString' => 'some string', 
    'anArray' => [ 1, 2, 3 ] 
]; 

echo json_encode($obj); 
Problemi correlati