我正在尝试将对象列表输出为json,并想知道是否存在一种使对象可用的方法json_encode?我得到的代码看起来像
json_encode
$related = $user->getRelatedUsers(); echo json_encode($related);
现在,我只是遍历用户数组,并将它们分别导出到数组中,json_encode以便对我来说变成可用的json。我已经尝试过使对象可迭代,但json_encode无论如何似乎都跳过了它们。
编辑 :这是var_dump();
php > var_dump($a); object(RedBean_OODBBean)#14 (2) { ["properties":"RedBean_OODBBean":private]=> array(11) { ["id"]=> string(5) "17972" ["pk_UniversalID"]=> string(5) "18830" ["UniversalIdentity"]=> string(1) "1" ["UniversalUserName"]=> string(9) "showforce" ["UniversalPassword"]=> string(32) "" ["UniversalDomain"]=> string(1) "0" ["UniversalCrunchBase"]=> string(1) "0" ["isApproved"]=> string(1) "0" ["accountHash"]=> string(32) "" ["CurrentEvent"]=> string(4) "1204" ["userType"]=> string(7) "company" } ["__info":"RedBean_OODBBean":private]=> array(4) { ["type"]=> string(4) "user" ["sys"]=> array(1) { ["idfield"]=> string(2) "id" } ["tainted"]=> bool(false) ["model"]=> object(Model_User)#16 (1) { ["bean":protected]=> *RECURSION* } } }
这是json_encode给我的:
php > echo json_encode($a); {}
我最终得到了这样的结果:
function json_encode_objs($item){ if(!is_array($item) && !is_object($item)){ return json_encode($item); }else{ $pieces = array(); foreach($item as $k=>$v){ $pieces[] = "\"$k\":".json_encode_objs($v); } return '{'.implode(',',$pieces).'}'; } }
它需要装满这些对象的数组或仅是单个实例,然后将它们转换为json- 我用它代替了json_encode。我敢肯定有些地方我可以做得更好,但是我希望json_encode能够检测何时根据对象的暴露接口迭代对象。
在RedBeanPHP 2.0中,有一个mass-export函数,该函数将整个bean集合变成数组。这适用于JSON编码器。
json_encode( R::exportAll( $beans ) );