一个空的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
答案 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上找到已修补的文件。在某些时候,我将添加单元测试并创建一个拉取请求。