web-dev-qa-db-fra.com

PHP vers JSON

J'essaie de faire écho au contenu d'un objet au format JSON. Je suis assez inexpérimenté avec PHP et je me demandais s'il y avait une fonction prédéfinie pour faire cela (comme json_encode ()) ou devez-vous construire la chaîne vous-même? Lorsque Google recherche un objet PHP à JSON ", je trouve juste des ordures.

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

Ce que je veux que JSON retourne:

{nom: "le contenu de $ name var", code: 1001, msg: erreur lors de la demande}

31
Reinard

Vous y êtes presque. Jetez un œil à get_object_vars en combinaison avec json_encode et vous aurez tout ce dont vous avez besoin. Faire:

json_encode(get_object_vars($error));

devrait retourner exactement ce que vous cherchez.

Les commentaires ont amené get_object_vars à respecter la visibilité, alors pensez à faire quelque chose comme ceci dans votre classe:

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

Et puis changer la suggestion précédente en:

json_encode($error->expose());

Cela devrait régler les problèmes de visibilité.

38
clexmond

Une solution alternative en PHP 5.4 + utilise l'interface 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);
    }
}

Ensuite, vous pouvez convertir votre objet d'erreur en [~ # ~] json [~ # ~] avec json_encode

$error = new MyError("Page not found", 404, "Unfortunately, the page does not exist");
echo json_encode($error);

Découvrez l'exemple ici

Plus d'informations sur\JsonSerializable

24
Mandy S

Vous devrez rendre votre variable publique pour qu'elle apparaisse sur json_encode().

De plus, le code que vous recherchez est

public function toJSON(){
    return json_encode($this);
}
9
Madara Uchiha
public function toJSON(){
    $json = array(
        'name' => $this->getName(),
        'code' => $this->getCode(),
        'msg' => $this->getMsg(),
    );

    return json_encode($json);
}

Démo: http://codepad.org/mPNGD6Gv

5
Neal