客户端向服务端发送HTTP请求,服务端接收请求并返回客户端请求的数据。服务端返回的数据可以是HTML网页、也可以是其它数据格式,最常用的数据格式就是JSON数据。
JSON数据的英文全称是JavaScript Object Notation,它是是一种轻量级的数据交换格式,采用文本格式来存储和表示数据,因此JSON数据独立于任何编程语言和操作系统,在数据交换中被广泛使用。
1、 JSON语法规则
JSON是一个标记符序列,标记符包括六个构造字符、字符串、数字和三个字面值。
构造字符是构造JSON数据的特定字符,六个构造字符分别是左大括号“{”、右大括号“}”、左中括号“[”、右中括号“]”、冒号“:”和逗号“,”。
在构造字符中,左大括号和右大括号要成对使用,用于封装JSON对象,左中括号和右中括号也要成对使用,用于封装JSON数组。
字符串和数字用于构成JSON对象内的数据。三个字面值为false、null和true,也用于构成JSON对象内的数据,false表示假、true表示真、null表示空。
JSON对象
JSON对象是一个无序的“名称/值”对集合。一个对象以“{”开始,“}”结束。每个“名称”后跟一个冒号“;”,多个“名称/值”对之间使用英文逗号分隔。
“名称/值”对的名称必须是字符串,值可以是字符串、数字、JSON对象、数组和三个字面值。
例如下面的JSON数据:
{
"name":"Petter",
"sex":"man",
"age":26
}上面的JSON数据是一个JSON对象,这个JSON对象有三个“名称/值”对,数据语义为一个人的姓名(name)、性别(sex)和年龄(age)。
JSON对象也可以嵌套,即在对象内又包含子对象。例如下面的JSON数据:
{
"employee":
{ "name":"Bill Gates", "age":62, "city":"Seattle" }
}上面的JSON数据就是一个嵌套的JSON对象,外层的JSON对象只有一个“名称/值”对,名称"employee"的值是一个JSON对象,该JSON对象有三个“名称/值”对。
JSON数组
JSON和JS的数组基本相同,它可以将多个JSON数据封装到一个结构体中,结构体使用一对中括号封闭,每个JSON数据之间用英文逗号分隔。
JSON数组的元素必须是合法的JSON数据,可以是JSON对象、字符串、数字、数组、true、false、null。
例如:
[“Petter”,”max”,29]
[{ "name":"Bill Gates", "age":62},{ "name":"Petter", "age":29}]
[“name”:[{ "Bill Gates",” Petter”}]]2、 使用JS操作JSON数据
JSON字符串与JSON对象的转换
当客户端发送JSON数据到服务端,或者服务端返回JSON数据到客户端时,都需要对JSON数据进行处理,将JSON数据转换为JSON字符串,才能通过网络进行传输。
客户端接收服务端返回的JSON字符串后,需要将JSON字符串转换为JSON对象,JS才能读取JSON数据。同理,服务端也需要将JSON字符串转换为JSON对象,才能读取JSON数据。
JS内置了JSON对象,该对象的parse()方法可以将JSON字符串转换为JSON对象,该对象的stringify()方法可以将JSON对象转换为字符串。
案例1:JSON字符串与JSON对象的转换(案例代码见unit5\case1.html):
JSON对象自身就是JS对象,访问<html>
<head>
<title>JavaScript开发案例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function show()
{
// JSON字符串
var text ='{"name":"Liza","password":"123"}'
// 将JSON字符串转换为JSON对象
var jsonObject = JSON.parse(text)
// 将JSON对象转换为字符串
var json_str = JSON.stringify(jsonObject)
}
</script>
</head>
<body>
<h3>JavaScript开发案例</h3>
<input type="button" value="JSON对象与JSON字符串转换" onclick="show()"/></p>
</body>
<html>访问JSON对象方式同JS对象相同,JSON对象的“名称/值”对可以看作是JS对象的属性和属性值,名称是JS对象的属性,值是JS对象的属性值。
案例2:访问JSON对象的属性(案例代码见unit5\case2.html):
<html>
<head>
<title>JavaScript开发案例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function show()
{
// JSON字符串
var text ='{"name":"Liza","password":"123"}'
// 将JSON字符串转换为JSON对象
var jsonObject = JSON.parse(text)
// 访问jsonObject对象属性name的值
alert(jsonObject.name)
}
// 遍历JSON对象
function traversal()
{
var packJson = { "name": "Liza", "password": "123"} ;
//遍历packJson对象的每个属性
for( var k in packJson ){
alert(k + " " + packJson[k]);
}
}
</script>
</head>
<body>
<h3>JavaScript开发案例</h3>
<input type="button" value="访问JSON对象" onclick="show()"/></p>
<input type="button" value="遍历JSON对象" onclick="traversal()"/></p>
</body>
<html>访问JSON数组
访问JSON数组和访问JS数组方式相同。
案例3:遍历JSON数组(案例代码见unit5\case3.html):
<html>
<head>
<title>JavaScript开发案例</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
// 遍历JSON数组
function traversal()
{
var packJson = [{ "name": "Liza", "password": "123"},
{ "name": "Mike", "password": "456"}];
//遍历packJson 数组时,i为索引
for( var i in packJson){
alert(packJson[i].name + " " + packJson[i].password);
}
}
</script>
</head>
<body>
<h3>JavaScript开发案例</h3>
<input type="button" value="遍历JSON数组" onclick="traversal()"/></p>
</body>
<html>