【问题标题】:zend_json an array that contains objectszend_json 一个包含对象的数组
【发布时间】:2011-10-28 17:09:56
【问题描述】:

所以假设我有这个

$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 json zend-framework object encoding


【解决方案1】:

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

【讨论】:

    【解决方案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,一个简单的toJson实现,只要简单的新建一个stdClass,把非公共属性的值复制到这个对象,然后返回Zend_Json::encode(myValueObject);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 2017-01-28
    • 2016-04-24
    相关资源
    最近更新 更多