公司目前所有接口都采用标准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" }
];
-
{
-
"employees":[
-
{
-
"firstName":"John",
-
"lastName":"Doe"
-
},
-
{
-
"firstName":"Anna",
-
"lastName":"Smith"
-
},
-
{
-
"firstName":"Peter",
-
"lastName":"Jones"
-
}
-
]
-
}
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数据
-
<?php
-
include_once (dirname(__FILE__)."/json.php");
-
-
$arr = Array('one', 'two', 'three');
-
$json = new Services_JSON();
-
-
$json_out = $json->encode($arr);
-
-
var_dump($json_out);
-
-
$json_in = $json->decode($json_out);
-
-
var_dump($json_in);
-
-
echo "====================\n";
-
$arr = Array(1 => 'one', 2 => 'two');
-
-
$json_out = $json->encode($arr);
-
-
var_dump($json_out);
-
-
$json_in = $json->decode($json_out);
-
-
var_dump($json_in);
-
-
?>
结果:
-
string(21) "["one","two","three"]"
-
array(3) {
-
[0]=>
-
string(3) "one"
-
[1]=>
-
string(3) "two"
-
[2]=>
-
string(5) "three"
-
}
-
====================
-
string(21) "{"1":"one","2":"two"}"
-
object(stdClass)#2 (2) {
-
["1"]=>
-
string(3) "one"
-
["2"]=>
-
string(3) "two"
二、xml
1、xml介绍
摘自w3c中的介绍:()
什么是 XML?
-
XML 指可扩展标记语言(EXtensible Markup Language)
-
XML 是一种标记语言,很类似 HTML
-
XML 的设计宗旨是传输数据,而非显示数据
-
XML 标签没有被预定义。您需要自行定义标签。
-
XML 被设计为具有自我描述性。
-
XML 是 W3C 的推荐标准
从上面可以看出相比于json来说xml是通过标签来形成一定的层次结构的。
2、标准的xml格式
-
<note>
-
<to>George</to>
-
<from>John</from>
-
<heading>Reminder</heading>
-
<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文件
-
-
<?xml version="1.0" encoding="ISO-8859-1"?>
-
<note>
-
<to>George</to>
-
<from>John</from>
-
<heading>Reminder</heading>
-
<body>Don
解析写法:
-
-
<?php
-
$xml = simplexml_load_file("test.xml");
-
-
echo $xml->getName() . "
";
-
-
foreach($xml->children() as $child)
-
{
-
echo $child->getName() . ": " . $child . "
";
-
}
-
?>
输出:
-
-
note
-
to: George
-
from: John
-
heading: Reminder
-
body: Don
b、创建
-
-
<?php
-
header ("Content-Type: text/plain; charset=utf-8");
-
-
$XMLstring = <<<XML
-
<?xml version='1.0' encoding='utf-8'?>
-
<testInfo>
-
</testInfo>
-
XML;
-
$xml = new SimpleXMLElement($XMLstring);
-
-
-
$item1 = $xml->addChild('num');
-
$item1->addAttribute('num', 1);
-
-
$item2 = $item1->addChild('ip');
-
$item2->addAttribute('testIp',"9.9.9.9");
-
-
echo $xml->asXML();
-
?>
输出:
-
-
<?xml version="1.0" encoding="utf-8"?>
-
<testInfo>
-
<num num="1"><ip testIp="9.9.9.9"/></num></testInfo>
-
三、两者比较
-
对比感觉来看,json的数据量由于没有标签等感觉会比较轻量,但是直观性感觉没有xml那么好
-
具体的差别感觉不大出来,目前多数语言对于两种格式都有较好的解析和创建,网上有很多关于两者的比较大家可以google下,我感觉在数据量不大的情况下,如果哪种感觉用得比较方便就使用哪种。如果数据量大可能就要考虑用json了,采用key-value的解析会比xml这种层级的解析来得快。
-
阅读(2318) | 评论(0) | 转发(1) |