所以假设我有这个
$arr = array(some object with property a,b,c,d,etc);
您致电Zend_Json::encode($arr);
而不是对其中的对象进行编码,它只返回一个编码的空数组:[{}]
这是史诗般的失败
如何告诉Zend_Json还对数组中的对象进行编码而不仅仅是返回此失败
##################### 编辑好吧所以我实际上在课堂上有这个方法:
public function toJson(){
$params = get_object_vars($this);
return Zend_Json::encode($params);
}
但它仍然只输出一个空数组
[{}]
编码对象本身是有效的,但如果它在数组中
则不行...
答案 0 :(得分:2)
如果您正在编码PHP对象,则默认编码机制可以 仅访问这些对象的公共属性。当一个方法toJson() 在要编码的对象上实现,Zend_Json调用此方法和 期望对象返回其内部的JSON表示 状态。
http://framework.zend.com/manual/en/zend.json.advanced.html#zend.json.advanced.objects2
更新:这是我试过的一段代码。它工作正常,我觉得你的对象属性没有值。
class Hello
{
private $hello = 'Hello';
public $wolrd = ' World';
public function getProperties()
{
return get_object_vars($this);
}
}
$json = new Zend_Json();
$hello = new Hello();
echo $json->encode( array( $hello->getProperties() ) );
结果:
[{"hello":"Hello","wolrd":" World"}]
希望这完全可行。来自帖子的一些想法;)http://blog.calevans.com/2008/02/21/zend_jsonencode-and-wth-are-all-my-properties/
答案 1 :(得分:0)
默认情况下,Zend_Json :: encode方法使用PHP json_encode函数。您需要将Zend_Json :: $ useBuiltinEncoderDecoder设置为true,并在您的数组中的域对象中实现toJson方法。此方法应返回有效的json字符串。
class Foo
{
private $a;
private $b;
public function toJson()
{
return $json = Zend_Json::encode(array(
'a' => $this->a;
'b' => $this->b
));
}
}
Zend_Json::$useBuiltinEncoderDecoder = true;
echo Zend_Json::encode(array(new Foo()));