php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记
简单数组json格式序列化/反序列化
php提供了json_encode和json_decode函数对对象进行json格式序列化/反序列化操作
$data=array('Name'=>'Byron','Age'=>24,'Sex'=>'Male','Friends'=>array('Casper','Frank','Vincent'));
$json=json_encode($data);//将数组序列化为json字符串
echo $json.'<br/>';
$array_json= json_decode($json);//将json字符串反序列化为数组
while(list($key,$value)=each($array_json)){
if(!is_array($value)){
echo "$key: $value<br/>";
}else{
echo "$key: ";
foreach ($value as $current) {
echo "$current  ";
}
echo '<br/>';
}
}

简单数组xml格式序列化/反序列化
php提供wddx_serialize_value和wddx_deserialize函数对对象进行xml格式序列化/反序列化操作
$data=array('Name'=>'Byron','Age'=>24,'Sex'=>'Male','Friends'=>array('Casper','Frank','Vincent'));
$xml=wddx_serialize_value($data);//把数组序列化为xml字符串
echo $xml.'<br/>';
$array_xml=wddx_deserialize($xml);//把xml字符串反序列化为数组
while(list($key,$value)=each($array_xml)){
if(!is_array($value)){
echo "$key: $value<br/>";
}else{
echo "$key: ";
foreach ($value as $current) {
echo "$current  ";
}
echo '<br/>';
}
}

虽然由于HTML转码原因,输出格式很奇怪,但其实序列化的字符串是这样的

和json格式相比较的话,多出来不少字段
复杂对象json格式序列化/反序列化
很多时候我们在进行操作的时候,处理的对象并不是简单数组,而是我们自定义的一个对象的数组,json_encode和json_decode也是可以胜任的。自定义一个和上面数组内容类似的对象
class Me
{
public $name;
public $age;
public $friends;
function __construct($name,$age,$friends)
{
$this->name=$name;
$this->age=$age;
$this->friends=$friends;
}
}
$me1=new Me('Byron',24,array('Casper','Frank','Vincent'));
$me2=new Me('Casper',25,array('Byron','Frank','Vincent'));
$me3=new Me('Frank',26,array('Casper','Byron','Vincent'));
//创建一个复杂的数组,子元素是自定义类,自定义类中包含数组字段
$array_me=array($me1,$me2,$me3);
$json=json_encode($array_me);//序列化对象数组为json字符串
echo $json.'<br/>';
$a=json_decode($json);//将json字符串反序列化为对象数组
foreach ($a as $aa) {
echo $aa->name.'<br/>';
}

可以看到序列化出来的字符串格式非常符合预期。
复杂对象xml格式序列化/反序列化
同样wddx_serialize_value和wddx_deserialize函数也能胜任复杂对象进行xml格式序列化/反序列化操作,使用刚才的对象做例子
$me1=new Me('Byron',24,array('Casper','Frank','Vincent'));
$me2=new Me('Casper',25,array('Byron','Frank','Vincent'));
$me3=new Me('Frank',26,array('Casper','Byron','Vincent'));
//创建一个复杂的数组,子元素是自定义类,自定义类中包含数组字段
$array_me=array($me1,$me2,$me3);
$xml=wddx_serialize_value($array_me);//序列化对象数组为xml字符串
echo $xml.'<br/>';
$a=wddx_deserialize($xml);//将xml字符串反序列化为对象数组
foreach ($a as $aa) {
echo $aa->name.'<br/>';
}

生成的xml字符串结构是这样的

最后
初学php,文章多有谬误,希望大家批评指正。
php json与xml序列化/反序列化的更多相关文章
- C# Json库 和 xml 序列化反序列化 存在的问题
json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法: 声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...
- 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化
谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...
- ASP.NET Web API中的JSON和XML序列化
ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化
前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本文描述ASP.NET W ...
- XML序列化反序列化—常用类
public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ...
- C# json、xml序列化
json序列化: public static string SerializeJson<T>(T json) { // 1. 需要添加引用 Newtonsoft.Json.dll,默认为 ...
- json 常用的序列化 反序列化对象 代码
序列化对象: ---------------------------------------------------------- Person p = new Person() { Name = & ...
- C# 复杂格式多级深度XML序列化反序列化
default.xml 文件如下: <config><partnerships> <partnership name="Main_Listener" ...
随机推荐
- OD使用教程7
破解程序获得使用权限: 破解思路:其实程序加密或者添加neg窗口都是为了让消费者付出更多的代价来解决这些问题.然而身为一个技术人员是可以靠技术来使这些东西消失的.只要我们找到那些东西出现的 ...
- 移动端前端笔记 — 遇到的常见JS与CSS问题及解决方法 ( 摘自zdwzdwzdw)
笔者接触移动前端快一年了,特将平时的一些笔记整理出来,希望能够给需要的人一些小小的帮助.同时也由于笔者的水平有限,虽说都是笔者遇到过使用过的,但文中可能也会出现一些问题或不严谨的地方,望各位指出,不胜 ...
- Angular常用功能
1.默认选择让第0个元素的class为active ng-class="{active:$index == 0}" 2.指令的例子 <!DOCTYPE html> &l ...
- IE全屏浏览代码
以前做过一个网络版的商场导购触摸屏系统,用ASP写的,就是要在运行的时候全屏浏览而不能出现标题栏.工具栏.状态栏等.解决方法是用JS弹出全屏窗口,建立html文件,代码如下: <script l ...
- IE事件模型,如何给IE和非IE浏览器添加事件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- 配置MySQL数据库
一.配置MySQL数据库 1.解压绿色版mysql,如下图 二.安装服务 1.运行cmd(管理员版本,否则没有权限),如下图 2.运行命令mysqld –install安装服务,如下图: 如果不需要m ...
- 解决 IE 6/7 中console对象兼容性问题
话不多说,直接上代码 (function (){ //创建空console对象,避免JS报错 if(!window.console) window.console = {}; var console ...
- Linux下Bash入门学习笔记
学习好shell编程是很有用的,可以使用shell脚本轻巧地完成有趣的工作. 本文地址:http://www.cnblogs.com/yhLinux/p/4047516.html 1. Bash实例, ...
- Poj.Grids 2951 浮点数求高精度幂
2951:浮点数求高精度幂 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个实数 R ( 0.0 < R < 99.999 ) ,要求写程序精确计算 R 的 n 次方. ...
- 教你如何快速下载旧版本的Firefox浏览器
http://blog.csdn.net/gh0st007/article/details/18937421 更新后的ff使用过程中经常出现卡顿的现象,之前并没有出现,于是想找老版本的ff安装一下.发 ...