как получить пустой объект Json с Zend_json? - PullRequest
1 голос
/ 28 апреля 2011

С http://json.org/:

пустой объект Json:

{}

Я пытался получить его с помощью json_encode (который официально является частью PHP):

json_encode((object)(array()))

это то, что мне нужно. Но как-то я должен использовать Zend_json, чтобы получить его:

Zend_Json::encode((object)(array()))

но результат:

{"__className": "stdClass"}

Есть идеи?

Моя версия PHP 5.1.6; ZF версия 1.7.2

Ответы [ 5 ]

2 голосов
/ 28 апреля 2011

Для меня это прекрасно работает:

<code>echo '<pre>'; print_r(Zend_Json::encode((object)array())); echo '
';выход;// Вывод: {}

Протестировано с ZF-версией 1.11.3

Также возможно:

Zend_Json::encode(new stdClass());
1 голос
/ 01 ноября 2011

На всякий случай, если кому-то все еще интересно, внутренний кодировщик ZF добавляет свойство __className к каждому объекту.Внутренний кодер используется, если расширение PECL json не установлено, и поэтому функция json_encode недоступна (см. http://php.net/manual/en/function.json-encode.php).

Просто используйте

preg_replace('/"__className":"[^"]+",/', '', $jsonString);

, чтобы избавитьсявсех элементов className

1 голос
/ 28 апреля 2011

Попробуйте

Zend_Json::encode(array());
0 голосов
/ 20 апреля 2013

Чтобы обойти это в Zf2, я добавил disableClassNameDecoding параметр к Zend\Json\Encoder.

Если вы хотите отключить вывод __className, вы можете использовать его следующим образом:

return Zend\Json\Json::encode($object, false, array('disableClassNameDecoding' => true));

Исправленный файл можно найти на github . В какой-то момент я добавлю модульные тесты и создаю запрос на извлечение.

0 голосов
/ 29 апреля 2011

Я нахожу решение, как показано ниже:

$m = Zend_Json::encode($obj);
$res = str_replace('"__className":"stdClass"', '', $m);
$res = str_replace("'__className':'stdClass'", '', $res);
$res = str_replace("'__className': 'stdClass'", '', $res);
$res = str_replace('"__className": "stdClass"', '', $res);
return $res; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...