Chinaunix首页 | 论坛 | 博客
  • 博客访问: 543023
  • 博文数量: 84
  • 博客积分: 1529
  • 博客等级: 上尉
  • 技术积分: 1472
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-27 17:57
文章分类

全部博文(84)

文章存档

2014年(7)

2013年(9)

2012年(20)

2011年(48)

分类: PHP

2013-10-24 22:20:28

    公司目前所有接口都采用标准API化,提供json和xml两个数据格式。以前在工作中稍微用过这两种格式,但是并不是也熟悉,且经常发现同事都在争论json和xm哪种比较好,要选择哪一种,但是每方好像都有自己的理由,因此自己希望通过整理以及实践去熟悉两种数据的生成和解析,以及各自的优缺点。

首先咱们来聊下json
一、json -- 官网:

1、jason的格式比较简单,正如某位大牛说的,jason格式只要几百个字就可以说清楚了

1) 并列的数据之间用逗号(", ")分隔。

2) 映射用冒号(": ")表示。

3) 并列数据的集合(数组)用方括号("[]")表示。

4) 映射的集合(对象)用大括号("{}")表示。


2、以下是标准的json格式
在一个employees数组中存有桑格对象,每个对象有两个并列数据,每个数据有一个映射关系,翻译成代码为:

var employees = [ { "firstName":"Bill" , "lastName":"Gates" }, { "firstName":"George" , "lastName":"Bush" }, { "firstName":"Thomas" , "lastName": "Carter" } ];


点击(此处)折叠或打开

  1. {
  2.     "employees":[
  3.         {
  4.             "firstName":"John",
  5.             "lastName":"Doe"
  6.         },
  7.         {
  8.             "firstName":"Anna",
  9.             "lastName":"Smith"
  10.         },
  11.         {
  12.             "firstName":"Peter",
  13.             "lastName":"Jones"
  14.         }
  15.     ]
  16. }
3、生成json数据
以PHP语言为例:
在5.2版本开始,PHP原生提供函数,前者用于编码,后者用于解码;具体用法可以查看php手册,目前公司很多系统多是采用5.1.6版本,还不支持这两个原生函数,因此都需要加载json.php脚本,该脚本封装了json的生成和解析。通过测试发现自带的解析函数会远比加载的解析还是快很多,自带的解析函数是用C语言写的模块,而加载的是用php来写的

测试过程中发现:
http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)

由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式



4、解析jsons数据


点击(此处)折叠或打开

  1. <?php
  2. include_once (dirname(__FILE__)."/json.php");

  3. $arr = Array('one', 'two', 'three');
  4. $json = new Services_JSON();

  5. $json_out = $json->encode($arr);    

  6. var_dump($json_out);

  7. $json_in = $json->decode($json_out);

  8. var_dump($json_in);

  9. echo "====================\n";
  10. $arr = Array(1 => 'one', 2 => 'two');

  11. $json_out = $json->encode($arr);

  12. var_dump($json_out);

  13. $json_in = $json->decode($json_out);

  14. var_dump($json_in);

  15. ?>

结果:
    

点击(此处)折叠或打开

  1. string(21) "["one","two","three"]"
  2. array(3) {
  3.   [0]=>
  4.   string(3) "one"
  5.   [1]=>
  6.   string(3) "two"
  7.   [2]=>
  8.   string(5) "three"
  9. }
  10. ====================
  11. string(21) "{"1":"one","2":"two"}"
  12. object(stdClass)#2 (2) {
  13.   ["1"]=>
  14.   string(3) "one"
  15.   ["2"]=>
  16.   string(3) "two"
二、xml
1、xml介绍
摘自w3c中的介绍:()

什么是 XML?

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签
  • XML 被设计为具有自我描述性
  • XML 是 W3C 的推荐标准

从上面可以看出相比于json来说xml是通过标签来形成一定的层次结构的。

2、标准的xml格式

点击(此处)折叠或打开

  1. <note>
  2. <to>George</to>
  3. <from>John</from>
  4. <heading>Reminder</heading>
  5. <body>Don
xml就是通过标签形式进行主层的嵌套,可以允许用户添加和删除层级,而不会使得解析崩溃。

3、json解析
xml在js中有很多好的支持,但是对于js学习不多(后期js会列入重点学习对象,学习完后在来完善该博文),通过PHP来实现xml的解析和创建

目前php提供了三种方式来支持:
  • (1)、(2)、注意:如果在php上没有安装phpxml的包的话会提示:PHP Fatal error:  Class 'DOMDocument' not found 错误,此时需要在/root目录下运行yum install php-xml,安装该rpm包,我这边系统php版本为5.1.6-32.el5,安装完后就可以执行了
    (3)、该函数是php自带的,但是版本要在5.0以上版本,针对该方式我写下解析和创建
  • a、解析:
  •     test.xml的xml文件

  • 点击(此处)折叠或打开

    1. <?xml version="1.0" encoding="ISO-8859-1"?>
    2. <note>
    3. <to>George</to>
    4. <from>John</from>
    5. <heading>Reminder</heading>
    6. <body>Don
    解析写法:

  • 点击(此处)折叠或打开

    1. <?php
    2. $xml = simplexml_load_file("test.xml");

    3. echo $xml->getName() . "
      "
      ;

    4. foreach($xml->children() as $child)
    5.   {
    6.   echo $child->getName() . ": " . $child . "
      "
      ;
    7.   }
    8. ?>

    输出:


  • 点击(此处)折叠或打开

    1. note
    2. to: George
    3. from: John
    4. heading: Reminder
    5. body: Don
    b、创建

  • 点击(此处)折叠或打开

    1. <?php
    2. header ("Content-Type: text/plain; charset=utf-8");

    3. $XMLstring = <<<XML
    4. <?xml version='1.0' encoding='utf-8'?>
    5. <testInfo>
    6. </testInfo>
    7. XML;
    8. $xml = new SimpleXMLElement($XMLstring);


    9. $item1 = $xml->addChild('num');
    10. $item1->addAttribute('num', 1);

    11. $item2 = $item1->addChild('ip');
    12. $item2->addAttribute('testIp',"9.9.9.9");    

    13. echo $xml->asXML();
    14. ?>

    输出:

  • 点击(此处)折叠或打开

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <testInfo>
    3. <num num="1"><ip testIp="9.9.9.9"/></num></testInfo>

  • 三、两者比较
  • 对比感觉来看,json的数据量由于没有标签等感觉会比较轻量,但是直观性感觉没有xml那么好
  • 具体的差别感觉不大出来,目前多数语言对于两种格式都有较好的解析和创建,网上有很多关于两者的比较大家可以google下,我感觉在数据量不大的情况下,如果哪种感觉用得比较方便就使用哪种。如果数据量大可能就要考虑用json了,采用key-value的解析会比xml这种层级的解析来得快。

阅读(2078) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~