для массива объектов я использовал что-то вроде этого, следуя пользовательскому методу для php <5.4:
аюсь вывести списки объектов как json и хотел бы знать, есть ли способ сделать объекты пригодными для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 сможет определить, когда нужно перебирать объект, основываясь на его открытых интерфейсах.