Zend_json一个包含对象的数组


zend_json an array that contains objects

假设我有这个

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

仍然只输出一个空数组

({})

编码对象本身可以工作,但如果它在数组

中则不行。

如果你正在编码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/

默认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()));