如何使用 Zend_json 获取空 Json 对象?

发布于 2024-11-03 16:51:28 字数 502 浏览 1 评论 0原文

来自 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

From http://json.org/:

an empty Json object is:

{}

I've tried to get it with json_encode (which is officially part of PHP):

json_encode((object)(array()))

that's what I need. But somehow I have to use Zend_json to get it:

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

but the result is:

{"__className": "stdClass"}

Any ideas?

My PHP version 5.1.6; ZF version 1.7.2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

合约呢 2024-11-10 16:51:28

对我来说,这完美地工作:

echo '<pre>'; print_r(Zend_Json::encode((object)array())); echo '</pre>'; exit;
// Output: {}

用 ZF 版本 1.11.3 测试

也可能:

Zend_Json::encode(new stdClass());

For me this works perfectly:

echo '<pre>'; print_r(Zend_Json::encode((object)array())); echo '</pre>'; exit;
// Output: {}

Tested with ZF-Version 1.11.3

Also possible:

Zend_Json::encode(new stdClass());
┼── 2024-11-10 16:51:28

尝试

Zend_Json::encode(array());

Try

Zend_Json::encode(array());
梦情居士 2024-11-10 16:51:28

以防万一有人仍然想知道,ZF 的内部编码器将 __className 属性添加到每个对象。
如果未安装 PECL 扩展 json,则使用内部编码器,因此 json_encode 函数不可用(请参阅 http://php.net/manual/en/function.json-encode.php )。

只需

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

用于删除所有 className 元素

Just in case anybody is still wondering, the internal encoder of the ZF adds the __className property to each object.
The internal encoder is used if the PECL extension json is not installed and thus the function json_encode not available (see http://php.net/manual/en/function.json-encode.php ).

Just use

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

to get rid of all className elements

自我难过 2024-11-10 16:51:28

我找到的解决方案如下:

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

I find the solution as below:

$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; 
你的背包 2024-11-10 16:51:28

为了在 Zf2 中解决这个问题,我在 Zend\Json\Encoder 中添加了一个 disableClassNameDecoding 选项。

如果要禁用 __className 输出,可以像这样使用它:

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

修补后的文件可以在 github。在某个时候,我将添加单元测试并创建拉取请求。

To get around this in Zf2 I have added a disableClassNameDecoding option to Zend\Json\Encoder.

If you want to disable the __className output, you can use it like this:

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

The patched file can be found on github. At some point I will add unit tests and create a pull request.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文