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" ...
随机推荐
- Thinkphp 学习笔记
前后台配置: 在根目录文件夹中创建一个Conf文件夹 Conf文件夹下建立一个config.php文件,里面存放公共配置信息,方便前后台调用. 简单定义404页面 伪静态去除.html Config中 ...
- exp
想将远程机器上的数据库备份,搞了一上午,终于解决了: exp 用户名/密码@ip/service名 file=地址+文件名
- HTML5+CSS3学习笔记(一)
HTML5+CSS3概述 HTML5和CSS3不仅仅是两项新的Web技术标准,更代表了下一代HTML和CSS技术.虽然HTML5的标准规范还没有正式发布,但是未来的发展前景已经可以预见,那就是HTML ...
- winfrom调用FastReport模板
'存放模板的路径 If Dir(Application.StartupPath & "\ReportsFile\HB\01\IN.frx", FileAttribute.N ...
- git 笔记
查看某个提交的修改:git show commitID 查看某个提交修改涉及的文件:git show commitID --oneline --name-status 清理掉没有入库的文件,并把修改了 ...
- WInform关闭程序的几种方法以及区别。
1.this.Close(); 关闭窗体,如果关闭的是主窗体 程序结束.2.Application.Exit(); 退出所有的窗体但是如果有托管线程的话无法完全退出3.Application.Exit ...
- link2001错误无法解析外部符号metaObject
http://blog.sina.com.cn/s/blog_791f544a0100r01b.html 1>MainWindowBottomWidget.obj : error LNK ...
- [转]Java学习日记之 volatile
用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...
- 好玩儿的Game
1. 种类: 威佐夫游戏, Bash游戏, Nim游戏, 等. 2. 理论: 胜态一定可以通过某种策略走向必败态; 而必败态采取任何策略都将走向胜态. 用图论的话来说, 因为必败态只能走向胜态, 所以 ...
- Eclipse中设置jsp文字大小