以正确的方式创建JSON对象


107

我正在尝试从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代码封装在“项目”中:{JSON CODE HERE}。

Answers:


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_OBJECTjson_encode($arr, JSON_FORCE_OBJECT)
亚当Lukaszczyk

这样对吗?$ post_data = json_encode(array('item'=> $ post_data),JSON_FORCE_OBJECT);
Mark Denn

1
也许这对某人会有帮助-jsonwrapper boutell.com/scripts/jsonwrapper.html json_(en|de)code对于早期版本的PHP
robertbasic 2010年

如果我在内部嵌套了某个数组怎么办$post_data。这也会使它们成为对象,对吗?
ProblemsSuSumit

回声json_encode(array('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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.