以正确的方式创建JSON对象

Mar*_*enn 100 php json

我试图从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);
Run Code Online (Sandbox Code Playgroud)

编码JSON的代码如下所示:

$post_data = json_encode($post_data);
Run Code Online (Sandbox Code Playgroud)

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
    }
} 
Run Code Online (Sandbox Code Playgroud)

如何将创建的JSON代码封装在"item"中:{JSON CODE HERE}.

Cri*_*ian 149

通常,你会做这样的事情:

$post_data = json_encode(array('item' => $post_data));
Run Code Online (Sandbox Code Playgroud)

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

$post_data = json_encode(array('item' => $post_data), JSON_FORCE_OBJECT);
Run Code Online (Sandbox Code Playgroud)

" {}"括号指定一个对象," []"根据JSON规范用于数组.

  • 我会在 `json_encode($arr, JSON_FORCE_OBJECT)` 中添加 `JSON_FORCE_OBJECT` (2认同)
  • 是的...但是您可以对其进行测试并告诉我们它是否有效;) (2认同)
  • 当键是字符串时,您不需要“JSON_FORCE_OBJECT”。它总是会为此产生一个对象。 (2认同)

the*_*Dmi 58

虽然这里发布的其他答案有效,但我发现以下方法更自然:

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

echo json_encode($obj);
Run Code Online (Sandbox Code Playgroud)

  • 这个反应太好了。此外,当您无法准确控制何时对对象进行编码或者您想要对对象数组进行编码时:那么 JSON_FORCE_OBJECT 响应将不起作用。另一面则更具可读性。谢谢! (2认同)

zeu*_*stl 28

你只需要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);
Run Code Online (Sandbox Code Playgroud)


Mit*_*esh 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);
Run Code Online (Sandbox Code Playgroud)