在 PHP 中的对象上使用 json_encode(不考虑范围)
我正在尝试将对象列表输出为 json,并想知道是否有办法使对象可用于 json_encode
?我得到的代码看起来像
I'm trying to output lists of objects as json and would like to know if there's a way to make objects usable to json_encode
? The code I've got looks something like
$related = $user->getRelatedUsers();
echo json_encode($related);
现在,我只是遍历用户数组并将它们单独导出到 json_encode
的数组中,以便为我转换成可用的 json.我已经尝试过使对象可迭代,但是 json_encode
似乎还是跳过了它们.
Right now, I'm just iterating through the array of users and individually exporting them into arrays for json_encode
to turn into usable json for me. I've already tried making the objects iterable, but json_encode
just seems to skip them anyway.
编辑:这是 var_dump();
edit: here's the 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 给我的:
and here's what json_encode gives me:
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 能够根据对象暴露的接口检测何时迭代它.
It takes arrays full of those objects or just single instances and turns them into json - I use it instead of json_encode. I'm sure there are places I could make it better, but I was hoping that json_encode would be able to detect when to iterate through an object based on its exposed interfaces.
推荐答案
在 RedBeanPHP 2.0 中有一个批量导出功能,可以将整个 bean 集合转换为数组.这适用于 JSON 编码器..
In RedBeanPHP 2.0 there is a mass-export function which turns an entire collection of beans into arrays. This works with the JSON encoder..
json_encode( R::exportAll( $beans ) );
相关文章