我们知道在 php 中,可以使用 json_encode() 对数据进行 json 编码,这个数据可以是 array,也可以是 object。
但是在对 object 进行编码时,只能对 public 属性的进行编码,但这样就有个问题, 现实生活中的对象是很复杂的, Json的这种默认只对属性做操作的做法有的时候是不能解决问题的,比如我们希望通过私有成员来做一些计算得到最后的Json化数据,,又或者我们希望用一个字符串来代替一个object。
在以前, 那你只能自己拼凑Json串了. 不过, 在5.4中, Json新增了一个JsonSerializable接口, 任何实现了这个接口的类, 需要定义一个jsonSerialize()方法, 这个方法会在对这个类的对象做Json化的时候被调用, 这个时候你就可以在这个方法内 , 随意调整最终的Json化的结果:
<?phpclass JsonTest implements JsonSerializable {private $a, $b;public function __construct($a, $b) {$this->a = $a;$this->b = $b;}public function jsonSerialize() {return $this->a + $this->b;}}echo json_encode(new JsonTest(23, 42));?>//65
一个复杂点的例子
<?php
$data = array(
new stdClass();
new JsonTest(1,2),
new JsonTest(3,4),
array(5,6)
);
echo json_encode($data);
?>
//[{},3,7,[5,6]]
