Создайте 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}.
Ответы
Ответ 1
Обычно вы делаете что-то вроде этого:
$post_data = json_encode(array('item' => $post_data));
Но, как вам кажется, вы хотите, чтобы вывод был с "{}
", вам лучше принудительно заставить json_encode()
кодировать как объект, передав константу JSON_FORCE_OBJECT
.
$post_data = json_encode(array('item' => $post_data), JSON_FORCE_OBJECT);
Скобки "{}
" указывают объект, а "[]
" используются для массивов в соответствии со спецификацией JSON.
Ответ 2
Хотя другие ответы, опубликованные здесь, работают, я нахожу следующий подход более естественным:
$obj = (object) [
'aString' => 'some string',
'anArray' => [ 1, 2, 3 ]
];
echo json_encode($obj);
Ответ 3
Вам нужен еще один слой в вашем 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);
Ответ 4
$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;
Ответ 5
Вы можете json кодировать общий объект.
$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);