将 PHP 类实例转换为 JSON

2022-08-30 11:28:05

我正在尝试以 JSON 格式回显对象的内容。我对PHP非常不熟悉,我想知道是否有预定义的函数可以做到这一点(如json_encode()),或者你必须自己构建字符串?当谷歌搜索“PHP对象到JSON”时,我只是在查找垃圾。

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

我想让JSON返回的内容:

{ 名称: “$name var 的内容”, 代码 : 1001, msg : 执行请求时出错}


答案 1

你就快到了。结合json_encode查看get_object_vars,您将拥有所需的一切。行为:

json_encode(get_object_vars($error));

应该完全返回您要查找的内容。

这些评论get_object_vars尊重可见性,因此请考虑在课堂上执行以下操作:

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

然后将之前的建议更改为:

json_encode($error->expose());

这应该解决可见性问题。


答案 2

PHP 5.4+ 中的另一种解决方案是使用 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);
    }
}

然后,您可以使用json_encode将错误对象转换为 JSON

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

在此处查看示例

有关 \JsonSerializable 的更多信息


推荐