2010-07-19 10 views
74

J'essaye de créer un objet JSON à partir d'un tableau PHP. Le tableau ressemble à ceci:Créer l'objet JSON de la bonne façon

$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); 

Le code pour coder le look JSON comme ceci:

$post_data = json_encode($post_data); 

Le fichier JSON est censé ressembler à ceci à la fin:

{ 
    "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 
    } 
} 

Comment puis-je encapsuler le code JSON créé dans le "item": {JSON CODE HERE}.

Répondre

113

Habituellement, vous feriez quelque chose comme ceci:

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

Mais, comme il vous semble voulez que la sortie soit avec « {} », vous feriez mieux de vous assurer de forcer json_encode() à coder comme objet, en passant la constante JSON_FORCE_OBJECT.

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

« {} » entre parenthèses et spécifier un objet « [] » sont utilisés pour les tableaux selon la spécification JSON.

+0

i ajouter la 'JSON_FORCE_OBJECT' dans 'json_encode ($ arr, JSON_FORCE_OBJECT)' –

+0

Est-ce correct? $ Post_data = json_encode (array ('item' => $ post_data), JSON_FORCE_OBJECT); – user339067

+1

Oui ... mais vous pouvez le tester et nous dire si cela a fonctionné;) – Cristian

18

Vous avez juste besoin une autre couche dans votre tableau 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

Juste ce dont j'avais besoin, merci – Setrino

25

Bien que les autres réponses affichées ici fonctionnent, je trouve l'approche suivante plus naturelle:

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

echo json_encode($obj); 
Questions connexes