如何用Zend_json获取一个空的Json对象?

时间:2011-04-28 11:25:11

标签: json zend-framework

来自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 个答案:

答案 0 :(得分:2)

对我而言,这完美无缺:

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

使用ZF-Version 1.11.3进行测试

也可能:

Zend_Json::encode(new stdClass());

答案 1 :(得分:1)

尝试

Zend_Json::encode(array());

答案 2 :(得分:1)

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

只需使用

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

去除所有className元素

答案 3 :(得分:0)

我找到的解决方案如下:

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

答案 4 :(得分:0)

要在Zf2中解决此问题,我在disableClassNameDecoding添加了Zend\Json\Encoder选项。

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

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

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