zend_json массив, содержащий объекты - PullRequest
2 голосов
/ 17 августа 2011

так что предположим, у меня есть это

$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 ]

2 голосов
/ 17 августа 2011

Если вы кодируете объекты 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/

0 голосов
/ 26 июля 2013

По умолчанию метод 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()));
...