我正在寻找一种将json_encode用于对象数组的有效方法。我遇到的问题是我的对象都有私有属性(使用getter和setter)而json_encode不会将它们拉进去。所以我为一个对象创建了一个jsonSerialize函数,返回私有变量,但我不知道如何执行有效地为数组中的每个对象的功能。我可以使用循环为每个对象执行jsonSerialize函数,但我担心这可能太慢了。
class car
{
private $make, $model;
public function jsonSerialize()
{
return get_object_vars($this);
}
}
控制器功能,以json格式返回汽车列表
$cars = $db->getAllCars(); //returns an array of objects using fetchall
return json_encode($cars);
答案 0 :(得分:5)
您不能将json_encode用于对象,它已写在手册中(http://php.net/manual/en/function.json-encode.php)
首先,您需要在对象中实现 JsonSerializable 界面,以实现您正在寻找的内容(http://php.net/manual/en/jsonserializable.jsonserialize.php)。
在您的情况下,您错过了接口声明。试试这个
class car implements JsonSerializable
{
private $make, $model;
public function jsonSerialize()
{
return get_object_vars($this);
}
}
答案 1 :(得分:2)
您可以使用JsonSerializable
这样的类型:
class Car implements JsonSerializable
{
private $make, $model;
public function jsonSerialize() {
return array($this->make, $this->model);
}
}
var $car = new Car();
echo json_encode($car, JSON_PRETTY_PRINT);