一、什么是JSON
1、JSON指的是JavaScript對象表示法(JavaScript Object Notation)。
2、JSON是輕量級的文本數據交換格式,比XML更小、更快、更易解析。
3、JSON獨立於語言。
4、JSON具有自我描述性、更易理解。
注意:JSON使用JavaScript語法來描述數據對象,但是JSON仍然獨立於語言和平台。JSON解析器和JSON庫支持許多不同的編程語言。目前非常多的動態編程語言(PHP、.NET)都支持JSON。
二、JSON和XML比較
1、與XML相同之處
1)JSON是純文本。
2)JSON具有“自我描述性”(人類可讀)。
3)JSON具有層級結構(值中存在值)。
4)JSON可通過JavaScript進行解析。
5)JSON數據可使用AJAX進行傳輸。
2、與XML不同之處
1)沒有結束標簽。
2)比XML更短。
3)比XML讀寫的速度更快。
4)能夠使用內建的JavaScript eval()方法進行解析。
5)可以使用數組。
6)不使用保留字。
3、為什么使用JSON
對於AJAX應用程序來說,JSON比XML更快更易使用:
使用XML:
讀取XML文檔。
使用XML DOM來循環遍歷文檔。
讀取值並存儲在變量中。
使用JSON
讀取JSON字符串。
用eval()處理JSON字符串。
三、JSON語法
JSON語法是JavaScript語法的子集。
1、語法規則
JSON語法是JavaScript對象表示語法的子集。
1)數據在名稱/值對中。
2)數據由逗號分隔。
3)大括號保存對象。
4)中括號保存數組。
2、JSON名稱/值對
JSON數據的書寫格式是:名稱/值對。
名稱/值對包括字段名稱(在雙引號中),后面寫一個冒號,然后是值:
"name":"Tom"
3、JSON值
JSON值可以是:
1)數字(整數或浮點數)。
2)字符串(在雙引號中)。
3)邏輯值(true或false)。
4)數組(在中括號中)。
5)對象(在大括號中)。
6)null。
4、JSON數字
JSON數字可以是整型或者浮點型:
{"age":30}
5、JSON對象
JSON對象在大括號({})中書寫:
對象可以包含多個名稱/值對:
{"name":"張三","age":24}
6、JSON數組
JSON數組在中括號中書寫:
數組可以包含多個對象:
{ "student":[ {"name":"張三","age":24}, {"name":"李四","age":25} ] }
在上面的例子中,對象"student"是包含三個對象的數組。每個對象代表一條關於某個學生(name,age)的記錄。
7、JSON布爾值
JSON布爾值可以是true或者false:
{"flag":true}
8、JSON null值
JSON可以設置null值:
{"student":null}
9、JSON使用JavaScript語法
因為JSON使用JavaScript語法,所以無需額外的軟件就能處理JavaScript中的JSON。
通過JavaScript,你可以創建一個對象數組,並像這樣進行賦值:
var student=[ {"name":"張三","age":24}, {"name":"李四","age":25} ];
可以像這樣訪問JavaScript對象數組中的第一項(索引從0開始)
student[0].name;
返回的內容是:
張三
可以像這樣修改數據:
student[0].name="tom";
10、JSON文件
1)JSON文件的文件類型是".json"。
2)JSON文本的MIME類型是"application/json"。
四、JSON對象
1、對象語法
{"name":"張三","age":25}
JSON對象使用在大括號({})中書寫。
對象可以包含多個key/value(鍵/值)對。
key必須是字符串,value可以是合法的JSON數據類型(字符串、數字、對象、數組、布爾值或null)。
key和value中使用冒號(:)分割。
每個key/value對使用逗號(,)分割。
2、訪問對象
你可以使用點(.)來訪問對象的值。
var myObj,x; myObj={"name":"張三","age":24}; x=myObj.name;
上面的例子輸出值:張三。
你也可以使用中括號([])來訪問對象的值。
var myObj,x; myObj={"name":"張三","age":24}; x=myObj["name"];
上面的例子同樣輸出值:張三。
3、循環對象
你可以使用for-in來循環對象的屬性,使用中括號([])來訪問屬性的值:
var myObj={"name":"張三","age":24}; for(x in myObj){ document.getElementById("demo").innerHTML += myObj[x]+"<br>"; }
4、嵌套JSON對象
JSON對象中可以包含另外一個JSON對象:
student={ "name":"張三", "age":24, "score":{ "C#高級編程":94, "SQL Server":83, "Python":75 } }
你可以使用點號(.)或者中括號([])來訪問嵌套的JSON對象。
例如:
var x=student.score.C#高級編程; // 或者 var x=student.score["C#高級編程"];
5、修改JSON對象的值
你可以使用點號(.)來修改JSON對象的值:
student.score.C#高級編程=90;
你也可以使用中括號([])來修改JSON對象的值:
student.score["C#高級編程"]=90;
6、刪除JSON對象的屬性
我們可以使用delete關鍵字來刪除JSON對象的屬性:
delete student.score.C#高級編程;
也可以使用中括號([])來刪除JSON對象的屬性:
delete student.score["C#高級編程"];
五、JSON數組
1、數組作為JSON對象
["C#","Java","Python"]
JSON數組在中括號中書寫。
JSON中數組值必須是合法的JSON數據類型(數字、字符串、對象、數組、布爾值或null)。
JavaScript中,數組值可以是以上的JSON數據類型,也可以是JavaScript的表達式,包括函數、日期、及undefined。
2、JSON對象中的數組
對象屬性的值可以是一個數組:
var student={ "name":"張三", "age":24, "subject":[".NET","java","python"] }
可以使用索引值來訪問數組:
var x=student.subject[0];
3、循環數組
可以使用for-in來訪問數組:
for(i in student.subject) { x += student.subject[i]+"<br>"; }
也可以使用for循環
for(int i=0;i<student.subject.length;i++) { x+=student.subject[i]+"<br>"; }
4、嵌套JSON對象中的數組
JSON對象中數組可以包含另外一個數組,或者另外一個JSON對象:
student={ "name":"張三", "age":24, "score":[ {".NET":91}, {"java":85}, {"python":79} ] }
可以使用for-in來循環訪問數組
for(i in student.score) { x +="<h1>" +student.score[i]+"</h1>"; }
5、修改數組值
可以使用索引值來修改數組值:
student.score[1]=93;
6、刪除數組元素
可以使用delete關鍵字來刪除數組元素:
delete student.score[0];