1. 程式人生 > >PHP,json_encode函式對於ObjectId的轉換時,使其結果為一個字串

PHP,json_encode函式對於ObjectId的轉換時,使其結果為一個字串

在一個PHP專案中使用了mongodb,然後自己對於模型層做了個簡單的封裝,期間遇到了json編碼模型物件的問題,因為mongoDB的_id,是ObjectId物件,所以在json編碼時,結果集會出現以下情況:

{"name":"Jon Jonsson","_id":{ "$oid" : "56213746bd21b9718b1d7371" } }

查找了一定資料,據說在之後的PHP擴充套件版本會修正。但對於之前版本,國外論壇中提出了一個解決方案:

class Person implements JsonSerializable {
    protected $_id;    //ObjectId
    protected $name;
 
    function JsonSerialize() {
        $arr = array(
            "name" => $this->name,
            "id"   => (string) $this->_id,
        );
        return $arr;
    }
}

為想要在json編碼中,將ObjectId轉換為字串的類,實現一個JsonSerializable 介面,然後自實現JsonSerialize方法即可。

改動之後的結果為:

{"name":"Jon Jonsson","_id":"56213746bd21b9718b1d7371" }

參考:https://jira.mongodb.org/browse/PHPC-459