PHP创建数组(索引或assosiative)的语法是相同的,也就是
$arr = [];
但是,json_encode
会将空的PHP“数组”(注意引号)转换为空的JS数组([]
),这在某些情况下是不可取的。
有没有办法可以在PHP中创建一个空的assosiative数组,所以json_encode
会将它转换为一个空的JS对象,即{}
,而不是[]
。
答案 0 :(得分:2)
使用stdClass()
:
php > $x = new StdClass;
php > echo json_encode($x);
{}
当然,一旦它成为stdclass,你将无法再将其用作数组。但这至少是一种在JSON中强制空对象的方法,所以你可以用特殊的方式代码:
if (count($array) == 0) {
$json = json_encode(new StdClass);
} else {
$json = json_encode($array);
}
答案 1 :(得分:2)
答案 2 :(得分:2)
您只需将JSON_FORCE_OBJECT
选项传递给json_encode
功能即可。这将强制任何空数组也成为对象。
JSON_FORCE_OBJECT(integer)输出对象而不是数组 当使用非关联数组时。特别有用的时候 输出的接收者期待一个对象,并且该数组是空的。 自PHP 5.3.0起可用。
所以:
if (empty($array)) {
$json = json_encode([], JSON_FORCE_OBJECT);
} else {
$json = json_encode($array);
}
在我看来,这看起来比转换对象更清晰。
甚至
$json = json_encode($array, empty($array) ? JSON_FORCE_OBJECT : 0);