一、JSON 語法規則:
JSON 是存儲和交換文本信息的語法
在開發過程中,經常需要和別的係統交換數據,數據交換的格式有XML、JSON等,
JSON作為一個輕量級的數據格式比xml效率要高,XML需要很多的標簽,這無疑占據了網絡流量。
1、JSON可以有兩種格式
一種是對象格式的:
{"name":"JSON","address":"北京市西城區","age":25}//JSON的對象格式的字符串
另一種是數組對象
[{"name":"JSON","address":"北京市西城區","age":25}]//數據對象格式
從上麵的兩種格式可以看出對象格式和數組對象格式唯一的不同則是在對象格式的基礎上加上了[],再來看具體的結構,可以看出都是以鍵值對的形式出現的,中間以英文狀態下的逗號(,)分隔。
在前端和後端進行數據傳輸的時候這種格式也是很受歡迎的,後端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析為json對象,然後進行遍曆,供前端使用。
javascript 對象表示語法的子集。
數據在名稱/值對中
數據由逗號分隔
花括號保存對象
方括號保存數組
二、JSON 名稱/值對
JSON 數據的書寫格式是:名稱/值對。
名稱/值對組合中的名稱寫在前麵(在雙引號中),值對寫在後麵(同樣在雙引號中),中間用冒號隔開:
"firstName":"John"
三、JSON 值
值可以是:
數字(整數或浮點數)
字符串(在雙引號中)
邏輯值(true 或 false)
數組(在方括號中)
對象(在花括號中)
JSON正常就是由對象和數組組成,對象使用對象的方法來進行操作。數組使用數組的方法來進行操作。
數組
var ourcountry=[["北京市"],["上海市"],["合肥市","蕪湖市","蚌埠市"]]; // 數組
alert(ourcountry[2][1]);
JSONArray
json數組,使用中括號[ ],隻不過數組裏麵的項也是json鍵值對格式的
JSON對象
json對象,就是一個鍵對應一個值,使用的是大括號{ },如:{key:value}
var status_process = {
" name5" : '閑置期',
"name1" : '播種期',
"name2" : '苗期',
"name3" : '生長期',
"name4" : '采收期'
}
alert(status_process["name5"]);
alert(status_process.name5);
// 兩個都為:閑置期
JSON字符串
所謂json字符串,是指該字符串變量的值與json的格式相同,但是不是json對象,比如:
var s1="{";
var s2 = " 'name5' : '閑置期', 'name1' : '播種期','name2' : '苗期','name3' : '生長期','name4' : '采收期'";
var s3="}";
var status_process=s1+s2+s3;
JSON數組遍曆
packJson = [
{"name":"zhang", "password":"123"},
{"name":"li", "password":"456"}
];
for(var p in packJson){//遍曆json數組時,這麼寫p為索引
alert(packJson[p].name + " " + packJson[p].password);
}
// 或者
for(var i = 0; i < packJson.length; i++){
alert(packJson[i].name + " " + packJson[i].password);
}
JSON數組的操作
1、定義 var josnArry=[];
2、添加 jsonArry.push(jsonObj);
3、刪除 delete jsonArry[0]; splice(index,length):
4.循環訪問數組
a.jquery
$.each(jsonArry,function(index,item){
var userId=item.userId;
});
b.一般方式
for(var i=0;i<jsonArry.length;i++)
{
var userId=jsonArry[i].userId;
}
c.特殊方法
for(var item in jsonArry)
{
var userId=jsonArry[item].userId;//注意:此處的item不是數組項,而是數組項的索引
}
JSON對象遍曆
myJson = {"name":"ji", "password":"123"};
for(var p in myJson){//遍曆json對象的每個key/value對,p為key
alert(p + " " + myJson[p]);
}
字符串和json對象和json對象數組相互轉換
var jsonStr = "{\"userId\":\"001\"}"; // json對象字符串
var jsonArryStr = "[{\"userId\":\"001\"},{\"userId\":\"002\"}]"; // json數組字符串
var jsonObj = JSON.parse(jsonStr); // 字符串轉為json對象
var jsonArry = JSON.parse(jsonArryStr); // 字符串轉為json數組
var jsonStr = JSON.stringify(jsonObj); // json對象轉為字符串
var jsonArryStr=JSON.stringify(jsonArry);// json數組轉為字符串
alert(jsonStr);
alert(jsonArryStr);
alert(jsonObj.userId);
alert(jsonArry[0]['userId']);
JSON.stringify(obj) 將JSON對象轉為字符串。
JSON.parse(string) 將字符串轉為JSON對象格式。
json字符串轉化成json對象
// jquery的方法var jsonObj = $.parseJSON(jsonStr)//js 的方法var jsonObj = JSON.parse(jsonStr)
json對象轉化成json字符串
//js方法var jsonStr1 = JSON.stringify(jsonObj)
注:隻有數組或者json數組才可以使用length方法。json對象使用length方法無效。
Map map和json都是鍵值對,不同的是map中鍵值對中間用等號分開,json中鍵值對中間用冒號分開。其實json就是一種特殊形式的map。