在同一个响应中,我得到一个字段作为对象,一个字段作为数组,我该怎么纠正呢?
注意我没有建议我的回复,因为我正在使用 JMSSerializer
代码(编辑1)
\实体\ Profil.php
class Profil
{
...
/**
* Get actualites
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getActualites()
{
return $this->actualites;
}
...
/**
* Add actualites
*
* @param \Genius\ProfileBundle\Entity\Actualite $actualites
* @return Profil
*/
public function addActualite(\Genius\ProfileBundle\Entity\Actualite $actualites)
{
$this->actualites[] = $actualites;
return $this;
}
...
public function __construct()
{
...
$this->actualites = new \Doctrine\Common\Collections\ArrayCollection();
...
}
答案 0 :(得分:3)
JsonResponse使用json_encode对值进行编码。默认情况下,json_encode会将php关联数组转换为json对象,数字索引数组将保留为json数组。有关json_encode如何工作的更多信息,请参阅PHP docs。
我的建议是以你想要你的json的方式格式化你的php。如果你只想在你的json中使用数组,那么你应该只使用数字索引数组格式化你的php数据。如果你只想在你的json中使用对象,那么将你的php数据格式化为仅使用关联数组。
示例:
$a = array(1,2,3);
echo json_encode($a); // [1,2,3] array output in json
$b = array('a'=>1, 'b'=>2, 'c'=>3);
echo json_encode($b); // {a:1,b:2,c:3} object output in json
看起来你正在使用一个ArrayCollection,它在技术上是一个对象。如果要将ArrayCollection转换为简单数组,Doctrine docs会显示您可以调用toArray()
方法。所以你会做这样的事情:
$arrayValue = $object->getActualites()->toArray();
您可以尝试其他一些事情,但它们可能会产生不必要的副作用。
解决方案1: 你可以在你的实体中尝试这个:
public function getActualites()
{
return $this->actualites->toArray();
}
这样,每当调用此方法时,它将返回一个数组而不是数组集合。这个解决方案比下一个好。
解决方案2: 另一种选择是使该变量本身成为一个数组。所以在构造函数中,你会有这个
public function __construct()
{
$this->actualites = array();
}
我还没有测试过这个解决方案,我不是百分百确定Doctrine 是否需要 Array Collection,但你可以尝试作为最后的手段。