PHP JsonSerializable 嵌套对象
PHP JsonSerializable nested object
我有一个奇怪的问题,但找不到解决方法。
我在 PHP 中使用 JsonSerializable 接口来创建 JSON 到 return。在我使用的一个对象中,我有一个变量,它是一个对象数组。它在数组只包含一个对象时有效,但当有多个对象时我得到一个空数组。我不明白。这是代码:
class SessionDate implements JsonSerializable {
private $_players;
public function getPlayers() { return $this->_players; }
public function setPlayers($players) {
$this->_players = $players;
}
public function jsonSerialize(){
return [
'players' => $this->getPlayers() // This is an array of player
];
}
}
class Player implements JsonSerializable {
private $_id;
private $_name;
public function getId() { return $this->_id; }
public function setId($id) { $this->_id = $id; }
public function getName() { return $this->_name; }
public function setName($name) { $this->_name = $name; }
public function jsonSerialize(){
return [
'id' => $this->getId(),
'name' => $this->getName()
];
}
}
这就是我获取玩家列表的方式:
$q = $this->_db->prepare('the query');
$q->execute();
$players = [];
while ($data = $q->fetch()) {
$sessionPlayer = constructPlayer($data);
$players[] = $sessionPlayer;
}
return $players;
我做错了什么?为什么当只有一名玩家而不是更多玩家时它会起作用??
谢谢。
** 编辑 **
我用 $.ajax 调用了 php 操作,看起来当有多个玩家时,$.ajax 响应会出错。所以也许是因为 JSON 格式不正确...
通过 JSON_UNESCAPED_UNICODE
将您的 $players 对象传递给 json_encode
echo json_encode($players, JSON_UNESCAPED_UNICODE);
JSON_UNESCAPED_UNICODE - Do not convert Unicode charactors to escape sequences (\uXXX) Added in PHP 5.4
我有一个奇怪的问题,但找不到解决方法。 我在 PHP 中使用 JsonSerializable 接口来创建 JSON 到 return。在我使用的一个对象中,我有一个变量,它是一个对象数组。它在数组只包含一个对象时有效,但当有多个对象时我得到一个空数组。我不明白。这是代码:
class SessionDate implements JsonSerializable {
private $_players;
public function getPlayers() { return $this->_players; }
public function setPlayers($players) {
$this->_players = $players;
}
public function jsonSerialize(){
return [
'players' => $this->getPlayers() // This is an array of player
];
}
}
class Player implements JsonSerializable {
private $_id;
private $_name;
public function getId() { return $this->_id; }
public function setId($id) { $this->_id = $id; }
public function getName() { return $this->_name; }
public function setName($name) { $this->_name = $name; }
public function jsonSerialize(){
return [
'id' => $this->getId(),
'name' => $this->getName()
];
}
}
这就是我获取玩家列表的方式:
$q = $this->_db->prepare('the query');
$q->execute();
$players = [];
while ($data = $q->fetch()) {
$sessionPlayer = constructPlayer($data);
$players[] = $sessionPlayer;
}
return $players;
我做错了什么?为什么当只有一名玩家而不是更多玩家时它会起作用??
谢谢。
** 编辑 **
我用 $.ajax 调用了 php 操作,看起来当有多个玩家时,$.ajax 响应会出错。所以也许是因为 JSON 格式不正确...
通过 JSON_UNESCAPED_UNICODE
将您的 $players 对象传递给 json_encodeecho json_encode($players, JSON_UNESCAPED_UNICODE);
JSON_UNESCAPED_UNICODE - Do not convert Unicode charactors to escape sequences (\uXXX) Added in PHP 5.4