Создать JSON-объект правильным способом - PullRequest
96 голосов
/ 19 июля 2010

Я пытаюсь создать объект 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 ЗДЕСЬ}.

Ответы [ 3 ]

143 голосов
/ 19 июля 2010

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

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

55 голосов
/ 20 августа 2016

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

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

echo json_encode($obj);
27 голосов
/ 20 августа 2014

Вам просто нужен еще один слой в вашем массиве 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...