Створіть JSON-об’єкт правильним способом


107

Я намагаюся створити об’єкт 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 у "пункт": {JSON КОД ТУТ}.

Відповіді:


161

Зазвичай ви робите щось подібне:

$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.


Я додав би JSON_FORCE_OBJECTвjson_encode($arr, JSON_FORCE_OBJECT)
Адам Лукашчик

Це правильно? $ post_data = json_encode (масив ('item' => $ post_data), JSON_FORCE_OBJECT);
Марк Денн

1
можливо, це буде комусь корисним - jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code для більш ранніх версій PHP
robertbasic

що робити, якщо у мене є десь вкладений масив $post_data. Це зробило б їх об'єктами також правильними?
ПроблемиOfSumit

echo json_encode (масив ('item' => $ post_data)); створить структуру JSON з: Object, Array, Object. або: {[{Що саме я шукав, імпортуючи відповідь MySQL JSON в додаток для iOS :-) ДЯКУЄ Крістіан !!!
Яків Топінг

63

Хоча інші відповіді, розміщені тут, працюють, я вважаю такий підхід більш природним:

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

echo json_encode($obj);

1
Ця відповідь така гарна. Крім того, коли ви точно не контролюєте, коли об’єкт буде кодуватися, або якщо ви хочете кодувати масив об'єктів: тоді відповідь JSON_FORCE_OBJECT не працює. З іншого боку набагато легше читати. Дякую!
Natxet

Якщо ви шукаєте кодер, який починається як об'єкт і продовжує містити масиви, це ваша відповідь.
suchislife

31

Вам просто потрібен ще один шар у вашому масиві 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

Ви можете 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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.