JSON与PHP开发摘要
JSON(Javascript Object Notation),即JavaScript对象表示,是由资深软件工程师Douglas Crockford开发的。它是一种轻量级的数据格式,基于JavaScript语法子集,即数组和对象表示。因为它使用的是JavaScript语法,所以JSON定义可以包含在JavaScript文件中,对其的访问无需通过基于XML的语言来额外解析。目前WEB通信中,在与服务器之间的往返通信中不是使用纯文本格式就是XML,而JSON则为AJAX通信提供了一种新的选择。JSON语法官方网站
JSON和JavaScript对象间的解码和编码
实现JSON和JavaScript对象之间解码和编码,首先需要一个工具程序json2.js。
编码方法:JSON.parse();
解码方法:JSON.stringify();
演示代码:
2 oCar.doors = 4;
3 oCar.color = "red";
4 oCar.year = 1995;
5 oCar.drivers = new Array("xzw","michael");
6 var x = JSON.stringify(oCar); //将JavaScript对象转换成JSON字符串
7
8 document.write(x+"<br/>");
9
10 var oObject = JSON.parse(x); //将JSON代码解析还原成JavaScript对象
11 document.write(oObject.drivers[0]);
服务器端(PHP)JSON工具
PHP5.2内置了JSON的支持,如果不清楚自己的PHP是否支持,可以用phpinfo查看一下。内置的编码方法:json_encode(),解码方法:json_decode()。
以下是PHP中JSON编码和解码的例子:
2 var $age;
3 var $hairColor;
4 var $name;
5 var $siblingName;
6 function Person($age,$name,$hairColor){
7 $this->name = $name;
8 $this->age = $age;
9 $this->hairColor = $hairColor;
10 $this->siblingName = array();
11 }
12 }
13
14 $oPerson = new Person("23","二毛","red");
15 $oPerson->siblingName[0] = "大毛";
16 $oPerson->siblingName[1] = "小毛";
17
18 $sJSONText = json_encode($oPerson); //编码
19 print ($sJSONText);
20 $oPerson = json_decode($sJSONText); //解码
21
22 print("<p>Name:".$oPerson->name."</p>");
23 print("<p>Age:".$oPerson->age."</p>");
24 print("<p>hairColor:".$oPerson->hairColor."</p>");
25 print("<p>Sibling Names:</p><ul>");
26 for($i=0;$i<count($oPerson->siblingName);$i++){
27 print("<li>".$oPerson->siblingName[$i]."</li>");
28 }
29 print("</ul>");
如果手头的PHP没有内嵌JSON实现,可以去网上下载一个JSON.PHP。通过这种方式,使用前需要先创建JSON实例。
2 require_once("JSON.php");
3 $oJSON = new JSON();
通过引用JSON.php改写前面的二毛兄弟例子:
2 $oJSON = new JSON();
3
4 class Person{
5 var $age;
6 var $hairColor;
7 var $name;
8 var $siblingName;
9 function Person($age,$name,$hairColor){
10 $this->name = $name;
11 $this->age = $age;
12 $this->hairColor = $hairColor;
13 $this->siblingName = array();
14 }
15 }
16
17 $oPerson = new Person("23","二毛","red");
18 $oPerson->siblingName[0] = "大毛";
19 $oPerson->siblingName[1] = "小毛";
20
21 //$sJSONText = json_encode($oPerson); //编码
22 $sJSONText = $oJSON->encode($oPerson);
23 print ($sJSONText);
24 //$oPerson = json_decode($sJSONText); //解码
25 $oPerson = $oJSON->decode($sJSONText);
26
27 print("<p>Name:".$oPerson->name."</p>");
28 print("<p>Age:".$oPerson->age."</p>");
29 print("<p>hairColor:".$oPerson->hairColor."</p>");
30 print("<p>Sibling Names:</p><ul>");
31 for($i=0;$i<count($oPerson->siblingName);$i++){
32 print("<li>".$oPerson->siblingName[$i]."</li>");
33 }
34 print("</ul>");
35
一切就这么简单。
JSON格式与XML相比,由于不需要与开始标签(opening tag)匹配的结束标签(closing tag),因此代码精简的很多。适当的运用将大大提高数据交换效率,值得一试。