问题描述
PHP创建数组(索引数组或关联数组)的语法相同,也就是
$arr = [];
但是, json_encode会将一个空的PHP“数组”(请注意引号)转换为一个空的JS数组( [] ),在某些情况下这是不希望的。
有没有一种方法可以在PHP中创建一个空的关联数组,所以json_encode会将其转换为一个空的JS对象,也称为{} ,而不是[] 。
1楼
使用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);
}
2楼
您可以使用 :
$obj = new stdClass();
echo json_encode($obj);
这使我获得了预期的{}输出。
3楼
您可以仅将JSON_FORCE_OBJECT选项传递给函数。
这也将迫使所有空数组也成为对象。
JSON_FORCE_OBJECT(整数)当使用非关联数组时,输出对象而不是数组。 当输出的接收者期望对象并且数组为空时,此功能特别有用。 自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);