在一个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" }