首頁 >後端開發 >PHP問題 >php不支援json_decode怎麼辦

php不支援json_decode怎麼辦

藏色散人
藏色散人原創
2021-06-15 09:58:321475瀏覽

php不支援json_decode的解決方法:先實作JsonSerializable抽象類別的介面方法jsonSerialize;然後指定需要被序列化成JSON的資料即可。

php不支援json_decode怎麼辦

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

php不支援json_decode怎麼辦? php json_encode不支援物件私有屬性的解決方法

本文介紹php json_encode不支援物件私有屬性的解決方法,json_encode可以把物件轉換為json格式,使用json_decode可以還原為物件。

但如果物件內含有私有屬性,執行json_encode後,私有屬性就會遺失。

範例:json_encode遺失物件私有屬性

<?php
// 用户类
class user{
    public $id = 1;
    public $name = &#39;fdipzone&#39;;
    public $profession = &#39;programmer&#39;;
    private $age = 18;
}
// 对象
$oUser = new User;
// json_encode
$json = json_encode($oUser);
echo $json;
// json_decode
$oUser = json_decode($json);
var_dump($oUser);
?>

輸出:

{"id":1,"name":"fdipzone","profession":"programmer"}
object(stdClass)[2]
  public &#39;id&#39; => int 1
  public &#39;name&#39; => string &#39;fdipzone&#39; (length=8)
  public &#39;profession&#39; => string &#39;programmer&#39; (length=10)

執行json_encode後,私有屬性age遺失了。

json_encode後物件的私有屬性遺失解決方法

我們可以修改類,使其實作JsonSerializable抽象類別的介面方法jsonSerialize,指定需要被序列化成JSON的數據。

關於JsonSerializable::jsonSerialize方法可參考官網:http://php.net/manual/zh/jsonserializable.jsonserialize.php

##修改後程式碼如下:

<?php
// 用户类
class user implements JsonSerializable{
    public $id = 1;
    public $name = &#39;fdipzone&#39;;
    public $profession = &#39;programmer&#39;;
    private $age = 18;
    // 实现的抽象类方法,指定需要被序列化JSON的数据
    public function jsonSerialize() {
        $data = [];
        foreach ($this as $key=>$val){
            if ($val !== null) $data[$key] = $val;
        }
        return $data;
    }
}
// 对象
$oUser = new User;
// json_encode
$json = json_encode($oUser);
echo $json;
// json_decode
$oUser = json_decode($json);
var_dump($oUser);
?>

輸出:

{"id":1,"name":"fdipzone","profession":"programmer","age":18}
object(stdClass)[2]
  public &#39;id&#39; => int 1
  public &#39;name&#39; => string &#39;fdipzone&#39; (length=8)
  public &#39;profession&#39; => string &#39;programmer&#39; (length=10)
  public &#39;age&#39; => int 18

在指定了需要被序列化成JSON的資料後,json_encode可以讀取到私有屬性age。

推薦學習:《

PHP影片教學

以上是php不支援json_decode怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn