如何在PHP中的对象上使用json_encode?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (123)

我试图以json的形式输出对象列表,并想知道是否有一种方法可以使对象可用到json_encode

$related = $user->getRelatedUsers();
echo json_encode($related);

现在,我只是在迭代用户数组,并将它们单独导出到数组中json_encode我已经尝试过让对象可以迭代,但是json_encode

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_编码给我:

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).'}';   
        }   
    }   
提问于
用户回答回答于

在RedBeanPHP2.0中,它将整个bean集合转换为数组。这适用于JSON编码器。

json_encode( R::exportAll( $beans ) );
用户回答回答于

PHP<5.4的解决方案

如果您确实想序列化您的私有和受保护对象属性,则必须实现一个JSON编码函数你的班级json_encode()在您为此目的创建的数据结构上。

class Thing {
    ...
    public function to_json() {
        return json_encode(array(
            'something' => $this->something,
            'protected_something' => $this->get_protected_something(),
            'private_something' => $this->get_private_something()                
        ));
    }
    ...
}

PHP>=5.4的解决方案

使用新的JsonSerializable接口提供您自己的json表示形式,以便json_encode

class Thing implements JsonSerializable {
    ...
    public function jsonSerialize() {
        return [
            'something' => $this->something,
            'protected_something' => $this->get_protected_something(),
            'private_something' => $this->get_private_something()
        ];
    }
    ...
}

扫码关注云+社区

领取腾讯云代金券