usar objeto json_numeric_check json_encode convertir constantes con como array php json scope redbean

objeto - php json_encode to js



Usando json_encode en objetos en PHP(independientemente del alcance) (8)

El siguiente código funcionó para mí:

public function jsonSerialize() { return get_object_vars($this); }

Estoy tratando de sacar listas de objetos como json y me gustaría saber si hay una forma de hacer que los objetos se puedan usar en json_encode ? El código que tengo parece algo así como

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

En este momento, solo estoy iterando a través de la matriz de usuarios y exportándolos individualmente en matrices para que json_encode convierta en json utilizable para mí. Ya he intentado hacer los objetos iterables, pero json_encode parece omitirlos de todos modos.

editar : aquí está el 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* } } }

y esto es lo que json_encode me da:

php > echo json_encode($a); {}

Terminé con solo esto:

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).''}''; } }

Toma arrays llenos de esos objetos o solo instancias individuales y los convierte en json: los uso en lugar de json_encode. Estoy seguro de que hay lugares en los que podría hacerlo mejor, pero esperaba que json_encode pudiera detectar cuándo iterar a través de un objeto en función de sus interfaces expuestas.


En PHP> = 5.4.0 hay una nueva interfaz para serializar objetos a JSON: JsonSerializable

Simplemente implemente la interfaz en su objeto y defina un método JsonSerializable que se llamará cuando use json_encode .

Entonces, la solución para PHP> = 5.4.0 debería ser algo como esto:

class JsonObject implements JsonSerializable { // properties // function called when encoded with json_encode public function jsonSerialize() { return get_object_vars($this); } }


En RedBeanPHP 2.0 hay una función de exportación masiva que convierte una colección completa de beans en matrices. Esto funciona con el codificador JSON ..

json_encode( R::exportAll( $beans ) );


No vi esto mencionado todavía, pero los beans tienen un método incorporado llamado getProperties() .

Entonces, para usarlo:

// What bean do we want to get? $type = ''book''; $id = 13; // Load the bean $post = R::load($type,$id); // Get the properties $props = $post->getProperties(); // Print the JSON-encoded value print json_encode($props);

Esto produce:

{ "id": "13", "title": "Oliver Twist", "author": "Charles Dickens" }

Ahora da un paso más. Si tenemos una variedad de frijoles ...

// An array of beans (just an example) $series = array($post,$post,$post);

... entonces podríamos hacer lo siguiente:

  • Pasa por la matriz con un ciclo foreach .

  • Reemplace cada elemento (un frijol) con una matriz de propiedades del frijol.

Así que esto...

foreach ($series as &$val) { $val = $val->getProperties(); } print json_encode($series);

... muestra esto:

[ { "id": "13", "title": "Oliver Twist", "author": "Charles Dickens" }, { "id": "13", "title": "Oliver Twist", "author": "Charles Dickens" }, { "id": "13", "title": "Oliver Twist", "author": "Charles Dickens" } ]

¡Espero que esto ayude!


Normalmente incluyo una pequeña función en mis objetos que me permite volcar a array o json o xml. Algo como:

public function exportObj($method = ''a'') { if($method == ''j'') { return json_encode(get_object_vars($this)); } else { return get_object_vars($this); } }

De cualquier manera, get_object_vars() probablemente sea útil para usted.


Todas las propiedades de tu objeto son privadas. aka ... no disponible fuera del alcance de su clase.

Solución para PHP <5.4

Si desea serializar sus propiedades de objetos privados y protegidos, debe implementar una función de codificación JSON dentro de su Clase que utilice json_encode() en una estructura de datos que cree para este fin.

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() )); } ... }

Solución para PHP> = 5.4

Utilice la nueva interfaz JsonSerializable para proporcionar su propia representación json para ser utilizada por 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() ]; } ... }

Una descripción más detallada


para una variedad de objetos, utilicé algo como esto, siguiendo el método personalizado para php <5.4:

$jsArray=array(); //transaction is an array of the class transaction //which implements the method to_json foreach($transactions as $tran) { $jsArray[]=$tran->to_json(); } echo json_encode($jsArray);


$products=R::findAll(''products''); $string = rtrim(implode('','', $products), '',''); echo $string;