Crea un oggetto JSON nel modo corretto


107

Sto cercando di creare un oggetto JSON da un array PHP. L'array ha questo aspetto:

$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 il JSON assomiglia a questo:

$post_data = json_encode($post_data);

Il file JSON dovrebbe apparire così 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 nell '"elemento": {JSON CODE HERE}.

Risposte:


161

Di solito, faresti qualcosa del genere:

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

Ma, poiché sembra che tu voglia che l'output sia con " {}", assicurati di forzare la json_encode()codifica come oggetto, passando la JSON_FORCE_OBJECTcostante.

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

Le {}parentesi " " specificano un oggetto e " []" vengono utilizzate per gli array in base alla specifica JSON.


Vorrei aggiungere l' JSON_FORCE_OBJECTinjson_encode($arr, JSON_FORCE_OBJECT)
Adam Lukaszczyk

È corretto? $ post_data = json_encode (array ('item' => $ post_data), JSON_FORCE_OBJECT);
Mark Denn

1
forse questo sarà utile per qualcuno - jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code per le versioni precedenti di PHP
robertbasic

cosa succede se ho un array da qualche parte annidato all'interno $post_data. Questo li renderebbe anche oggetti, giusto?
ProblemsOfSumit

echo json_encode (array ('item' => $ post_data)); creerà la struttura JSON di: Object, Array, Object. oppure: {[{Che è esattamente quello che stavo cercando, importando la risposta JSON di MySQL in un'app iOS :-) GRAZIE Cristian !!!
Jacob Topping

63

Sebbene le altre risposte pubblicate qui funzionino, trovo il seguente approccio più naturale:

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

echo json_encode($obj);

1
Questa risposta è così buona. Anche quando non controlli esattamente quando un oggetto verrà codificato o se desideri codificare un array di oggetti: la risposta JSON_FORCE_OBJECT non funziona. D'altra parte è molto più leggibile. Grazie!
Natxet

Se stai cercando una codifica che inizi come un oggetto e continui a contenere array, questa è la tua risposta.
suchislife

31

Hai solo bisogno di un altro livello nel tuo array 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);

1
$post_data = [
  "item" => [
    '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
  ]
];

$post_data = json_encode(post_data);
$post_data = json_decode(post_data);
return $post_data;

1

Potresti codificare json un oggetto generico.

$post_data = new stdClass();
$post_data->item = new stdClass();
$post_data->item->item_type_id = $item_type;
$post_data->item->string_key = $string_key;
$post_data->item->string_value = $string_value;
$post_data->item->string_extra = $string_extra;
$post_data->item->is_public = $public;
$post_data->item->is_public_for_contacts = $public_contacts;
echo json_encode($post_data);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.