在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 &emsp;";
}
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 &emsp;";
}
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序列化/反序列化的更多相关文章

  1. C# Json库 和 xml 序列化反序列化 存在的问题

    json 正常情况下不会对私有成员进行序列化和反序列化, 因此在用json做深拷贝时, 就会丢失数据. 解决办法:       声明成公有成员. json在序列化和反序列化时, 如果类中有IComma ...

  2. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

  3. ASP.NET Web API中的JSON和XML序列化

    ASP.NET Web API中的JSON和XML序列化 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok ...

  4. C# XML序列化/反序列化参考

    .NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...

  5. 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 ...

  6. XML序列化反序列化—常用类

    public class XMLSerializer    {        #region (public) xml序列化        /// <summary>        /// ...

  7. C# json、xml序列化

    json序列化: public static string SerializeJson<T>(T json) { // 1. 需要添加引用 Newtonsoft.Json.dll,默认为 ...

  8. json 常用的序列化 反序列化对象 代码

    序列化对象: ---------------------------------------------------------- Person p = new Person() { Name = & ...

  9. C# 复杂格式多级深度XML序列化反序列化

     default.xml 文件如下: <config><partnerships>  <partnership name="Main_Listener" ...

随机推荐

  1. 一个Angular模块中可以声明哪些组件?

    一个Angular模块中可以声明哪些组件? (1) controller        控制器 (2) directive                指令 (3) function         ...

  2. 解决chrome和IE样式兼容问题

    在页面title中加入: <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"> ...

  3. 开启梦幻般的webrtc之旅

    废话不多说,直接上demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. OD使用教程9

    先运行程序打开about,发现这是一个未注册的软件需要注册后才能使用里面的工具,所以随便注册一下,跳出一个提示说注册的是非法的邮箱,所以就可以以此做为突破口来破解这个程序 将提示的语句作为关键字去找出 ...

  5. 轮播神器swiper插件

    Swiper中文网:http://www.swiper.com.cn/ Swiper- 是免费的,最现代化的移动触摸滑块硬件加速的转换和惊人的天然行为.它的目的是在移动网站,移动网络应用和移动本地/混 ...

  6. java继承的构造函数

    1.在构造函数的继承中,子类不能继承父类的构造函数.但是子类却可以用super()或super(参数)使用父类的构造函数, <1>无参的构造函数: //父类 public class An ...

  7. 安卓奇葩问题之.so库加载不了

    真是哔了狗了. 今天突然遇到一个问题:之前用第三方的密码控件,给了一个.so库文件.然后我就放在了/jniLibs/armeabi目录下. 运行,一切都很OK. 然后重点来了.N天之后的今天,突然打包 ...

  8. SQL一致性错误修复SQL

    USE master; ); SET @databasename = 'BenlaiTask'; ALTER DATABASE BenlaiTask SET SINGLE_USER WITH ROLL ...

  9. Mini projects #5 ---- Memory

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  10. 2016-11-15mysql优化笔记

    1.mysql连接数:MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,连接数少的话,在大并发下连接数会不够用,会有很多线程在等待其他连接释放, ...