Создайте JSON-объект правильным способом

Я пытаюсь создать объект JSON из массива PHP. Массив выглядит следующим образом:

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

Код для кодирования JSON выглядит следующим образом:

 $post_data = json_encode($post_data); 

Файл JSON должен выглядеть следующим образом:

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

Как я могу инкапсулировать созданный код JSON в «item»: {JSON CODE HERE}.

Обычно вы делаете что-то вроде этого:

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

Но, как кажется, вы хотите, чтобы результат был с « {} », вы должны убедиться, что json_encode() принудительно json_encode() как объект, передав константу JSON_FORCE_OBJECT .

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

« {} « скобки указывают объект, а « [] » используются для массивов в соответствии со спецификацией JSON.

Хотя другие ответы, опубликованные здесь, работают, я считаю следующий подход более естественным:

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

Вам просто нужен еще один слой в вашем 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);