JsonSerializable接口
来源:互联网 发布:java调用存储过程 编辑:程序博客网 时间:2024/05/01 14:12
本文地址: http://www.laruence.com/2011/10/10/2204.html
Json是Ajax应用中最为通用的数据传输格式(协议), 主流的编程语言都带有对Json的支持, 在PHP中, 有json_encode/json_decode, 可以很方便的构造Json数据格式.
<?phpecho 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, 在5.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]]最后提醒一下, PHP 5.4还处于开发阶段, 在最终release之前, 这些特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
- JsonSerializable接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- 接口
- CScorllView中绘图的注意事项
- 更改当前数据库中 SQL Server 用户与 Microsoft® SQL Server™ 登录之间的关系
- 404 图片
- 联通和电信的流媒体播放
- 再谈iframe自适应高度(http://www.cnblogs.com/MaxIE/archive/2008/08/13/1266597.html)
- JsonSerializable接口
- python 定时器
- 使用ssh或scp无需输入密码方法
- 求助-关于自动还原---
- 黑马程序员--编程基础学习笔记二
- 如何android多Activity间共享数据
- WebRtc代码分布
- java堆栈
- 二层交换机下带用户ARP攻击处理