zend_json包含对象的数组

时间:2011-08-17 08:15:40

标签: php json zend-framework object encoding

所以假设我有这个

$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);
}

但它仍然只输出一个空数组

[{}]

编码对象本身是有效的,但如果它在数组中

则不行

...

2 个答案:

答案 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()));