如何创建一个JSON对象

134

我正在尝试从PHP数组创建一个JSON对象。该数组看起来像这样:

$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}中。

5个回答

193

通常,您会这样做:

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

但是,由于您似乎希望输出结果使用 "{}",因此最好通过传递JSON_FORCE_OBJECT常量来强制json_encode()编码为对象。

$post_data = json_encode(array('item' => $post_data), JSON_FORCE_OBJECT);
"{}" 表示一个对象,"[]" 表示一个数组,这是根据 JSON 规范来的。

2
我会在 json_encode($arr, JSON_FORCE_OBJECT) 中添加 JSON_FORCE_OBJECT - Adam Lukaszczyk
$post_data = json_encode(array('item' => $post_data), JSON_FORCE_OBJECT);这句话是正确的吗? - Mark Denn
1
也许这对某些人有帮助 - jsonwrapper http://www.boutell.com/scripts/jsonwrapper.html 为早期版本的PHP提供了json_(en|de)code - robertbasic
如果我在$post_data中嵌套了一个数组,那么它们也会变成对象,对吗? - ProblemsOfSumit
echo json_encode(array('item' =>$post_data)); 将创建以下JSON结构:对象,数组,对象。或者: { [ {这正是我搜索的内容,将MySQL JSON响应导入iOS应用程序 :-) 谢谢Cristian! - Jacob Topping
2
当键是字符串时,您不需要使用JSON_FORCE_OBJECT。它总是会生成一个对象。 - Barmar

91

虽然这里发布的其他答案可以派上用场,但我认为以下方法更自然:

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

echo json_encode($obj);

2
这个回应非常好。当你无法精确控制对象何时被编码,或者想要编码一个对象数组时,JSON_FORCE_OBJECT 响应就不起作用了。另一方面,它更易读。谢谢! - Natxet
1
如果您正在寻找一个以对象开始并包含数组的编码方式,那么这就是您的答案。 - suchislife
实际上对于我的情况,它转换为JSON字符串对象,如下所示:string(36) "{"aString":626,"anArray":"OFZgavNT"}",而不是像原始的JSON对象一样,如下所示:object(stdClass)#27 (2) { ["id"]=> int(626) ["firm_id"]=> int(63) } - Bala

39

你只需要在你的 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);

6
你可以对一个通用对象进行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);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接