json_encode - php object to json
Instancia de clase PHP a JSON (4)
Estoy intentando repetir el contenido de un objeto en formato JSON. Estoy bastante inexperto con PHP y me preguntaba si hay una función predefinida para hacer esto (como json_encode ()) o ¿tiene que construir la cadena usted mismo? Cuando busca en Google "objeto PHP a JSON", solo encuentro basura.
class Error {
private $name;
private $code;
private $msg;
public function __construct($ErrorName, $ErrorCode, $ErrorMSG){
$this->name = $ErrorName;
$this->code = $ErrorCode;
$this->msg = $ErrorMSG;
}
public function getCode(){
return $this->code;
}
public function getName(){
return $this->name;
}
public function getMsg(){
return $this->msg;
}
public function toJSON(){
$json = "";
return json_encode($json);
}
}
Lo que quiero que JSON devuelva:
{name: "el contenido de $ name var", código: 1001, msg: error al hacer la solicitud}
Deberá hacer pública su variable para que aparezca en json_encode()
.
Además, el código que estás buscando es
public function toJSON(){
return json_encode($this);
}
Estás por allí. Eche un vistazo a get_object_vars en combinación con json_encode y tendrá todo lo que necesita. Obra:
json_encode(get_object_vars($error));
debe devolver exactamente lo que estás buscando.
Los comentarios que aparecen en get_object_vars respetan la visibilidad, así que considere hacer algo como lo siguiente en su clase:
public function expose() {
return get_object_vars($this);
}
Y luego cambiando la sugerencia anterior a:
json_encode($error->expose());
Eso debería ocuparse de los problemas de visibilidad.
Una solución alternativa en PHP 5.4+ es el uso de la interfaz JsonSerializable .
class Error implements /JsonSerializable
{
private $name;
private $code;
private $msg;
public function __construct($errorName, $errorCode, $errorMSG)
{
$this->name = $ErrorName;
$this->code = $ErrorCode;
$this->msg = $ErrorMSG;
}
public function jsonSerialize()
{
return get_object_vars($this);
}
}
Luego, puede convertir su objeto de error en JSON con json_encode
$error = new MyError("Page not found", 404, "Unfortunately, the page does not exist");
echo json_encode($error);
Mira el ejemplo here
public function toJSON(){
$json = array(
''name'' => $this->getName(),
''code'' => $this->getCode(),
''msg'' => $this->getMsg(),
);
return json_encode($json);
}
Demostración: http://codepad.org/mPNGD6Gv