Using json_encode on objects in PHP (regardless of scope)(在 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 ) );
                        这篇关于在 PHP 中的对象上使用 json_encode(不考虑范围)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 PHP 中的对象上使用 json_encode(不考虑范围)
				
        
 
            
        基础教程推荐
- 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
 - php 7.4 在写入变量中的 Twig 问题 2022-01-01
 - 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
 - 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
 - PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
 - Web 服务器如何处理请求? 2021-01-01
 - 将变量从树枝传递给 js 2022-01-01
 - php中的PDF导出 2022-01-01
 - php中的foreach复选框POST 2021-01-01
 - Yii2 - 在运行时设置邮件传输参数 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				