我有这段代码
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>array(),
);
echo json_encode($status, JSON_FORCE_OBJECT);
我有这段代码
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>array(),
);
echo json_encode($status, JSON_FORCE_OBJECT);
使用json_encode
函数的JSON_FORCE_OBJECT
选项:
json_encode($status, JSON_FORCE_OBJECT);
JSON_FORCE_OBJECT (整数) 当一个非关联数组被使用时,输出一个对象而不是数组。当输出接收方期望一个对象而数组为空时尤其有用。自 PHP 5.3.0 起可用。
或者,如果您想在对象中保留您的“其他”数组,请不要使用先前的答案,而是使用以下内容:
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=> new stdClass()
);
["one"]
这样的数组会被转换成一个错误的对象。 - Lukenew stdClass()
替换... - Dimitry K$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>(object) array(),
);
通过将数组转换为对象,json_encode
将始终对值使用大括号而不是方括号(即使为空也是如此)。
当无法使用 JSON_FORCE_OBJECT
且无法(或不想)使用实际对象作为值时,这很有用。
JSON_FORCE_OBJECT
标志,自PHP 5.3以来可用。请参见http://php.net/json_encode。请注意,这将适用于所有数组。$data = new stdClass;
$data->foo = 'bar';
...
Map()
。文档。json_encode
一起按预期工作。它还具有一些其他小优点,如对象键和更好的内存处理。use Ds\Map;
$status = new Map([
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>array(),
]);
$map = new Map();
print json_encode($map); // {}
$map = new Map();
$map["foo"] = "bar";
print json_encode($map); // {"foo":"bar"}
print $map["foo"]; // bar
$map = new Map();
$map[1] = "foo";
$map[2] = "bar";
$map[3] = "baz";
print json_encode($map); // {"1":"foo","2":"bar","3":"baz"}
虽然这可能不被认为是“优雅的”,但简单的字符串替换可以有效地解决这个问题。
str_replace("[]", "{}", json_encode($data));
这可以缓解JSON_FORCE_OBJECT
将普通数组转换为对象的问题。
[]
,则此方法无法正常工作:str_replace('[]', '{}', json_encode(['key' => '[]']))
--> {"key":"{}"}
- siikamiika