我不知何故不熟悉php所以这对你来说可能看起来像个愚蠢的问题。我试图谷歌这个,但没有找到我正在寻找的方法。
我有一个自定义类,我想使用php 5.5中的JsonSerializable接口序列化为json。代码目前看起来像这样:
class MyClass implements JsonSerializable
{
public $attr1;
public $attr2;
.....
public function jsonSerialize()
{
return array(
'attr1' => $this->attr1,
'attr2' => $this->attr2,
....
);
}
}
现在,如果您的对象中有20个实例变量,那么这看起来就像是坏代码,这就是为什么我想要将这个方法折射成这样的东西:
public function jsonSerialize()
{
return get_object_vars($this);
}
虽然get_object_vars应该返回一个关联数组('attr1'=> value1,...),如果我想序列化一个对象数组,这会导致一个空的json字符串:
$obj = new MyClass(..);
echo json_encode($obj); // this works. output: {"attr1":value1, ....}
$objarray = array(new MyClass(..), new MyClass(..));
echo json_encode($objarray); // this returns an empty string of length 0!
我在这里做错了什么? 如果这是一个完全错误的做法,我很乐意得到任何提示:>
提前感谢!
//更新
几个小时后,我发现了问题。我从数据库创建对象数组,而不是设置charset=utf8
。因为json_encode无法处理其他字符集,所以它什么都没有返回。