A. *_*ger 72 php json scope redbean
我正在尝试输出对象列表作为json,并想知道是否有一种方法可以使对象可用json_encode
?我得到的代码看起来像
$related = $user->getRelatedUsers();
echo json_encode($related);
Run Code Online (Sandbox Code Playgroud)
现在,我只是遍历用户数组并单独将它们导出到数组中,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*
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是json_encode给我的:
php > echo json_encode($a);
{}
Run Code Online (Sandbox Code Playgroud)
我最后得到了这个:
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).'}';
}
}
Run Code Online (Sandbox Code Playgroud)
它需要数组充满这些对象或只是单个实例并将它们变成json - 我使用它而不是json_encode.我确信有些地方可以让它变得更好,但我希望json_encode能够检测何时根据其公开的接口迭代对象.
jon*_*ohn 144
对象的所有属性都是私有的.又...在他们班级范围之外不可用.
如果你想给你的序列化私有和保护对象的属性,你必须实现一个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()
));
}
...
}
Run Code Online (Sandbox Code Playgroud)
使用新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()
];
}
...
}
Run Code Online (Sandbox Code Playgroud)
ila*_*nco 41
在PHP> = 5.4.0中,有一个用于将对象序列化为JSON的新接口:JsonSerializable
只需在对象中实现接口,并定义一个JsonSerializable
在使用时调用的方法json_encode
.
所以PHP> = 5.4.0 的解决方案看起来应该是这样的:
class JsonObject implements JsonSerializable
{
// properties
// function called when encoded with json_encode
public function jsonSerialize()
{
return get_object_vars($this);
}
}
Run Code Online (Sandbox Code Playgroud)
在RedBeanPHP 2.0中,有一个批量导出函数,它将整个bean集合转换为数组.这适用于JSON编码器..
json_encode( R::exportAll( $beans ) );
Run Code Online (Sandbox Code Playgroud)
小智 5
以下代码对我有用:
public function jsonSerialize()
{
return get_object_vars($this);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
114664 次 |
最近记录: |