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();
演示代码:
1
var
oCar
=
new
Object();
//
新建轿车对象
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编码和解码的例子:
1
class
Person{
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实例。
1
//
include JSON-PHP and instantiate the object
2
require_once
(
"
JSON.php
"
);
3
$oJSON
=
new
JSON();
通过引用JSON.php改写前面的二毛兄弟例子:
1
require_once
(
"
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),因此代码精简的很多。适当的运用将大大提高数据交换效率,值得一试。