5.4中对Json做的一个改进.
Json
是Ajax应用中最为通用的数据传输格式(协议), 主流的编程语言都带有对Json
的支持, 在PHP中, 有json_encode
/json_decode
, 可以很方便的构造Json数据格式.
<?php
echo json_encode(array(1,2,3,4));
//[1,2,3,4]
也可以Json化一个对象:
<?php
$o = new stdclass;
$o->a = 42;
echo json_encode($o); //{"a":42}
但这样就有个问题, 现实生活中的对象是很复杂的, Json的这种默认只对属性做操作的做法有的时候是不能解决问题的, 比如我们希望通过私有成员来做一些计算得到最后的Json化数据, 又或者我们希望用一个字符串来代替一个object.
在以前, 那你只能自己拼凑Json串了. 不过感谢Sara, 在PHP5.4
中, Json新增了一个JsonSerializable
接口, 任何实现了这个接口的类, 需要定义一个jsonSerialize()
方法, 这个方法会在对这个类的对象做Json化的时候被调用, 这个时候你就可以在这个方法内 , 随意调整最终的Json化的结果:
<?php
class 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]]
网友评论