js讀取解析JSON資料
簡介
1、JSON 指的是 JavaScript 物件表示法(JavaScript Object Notation) JSON
2、是輕量級的文字資料交換格式。 JSON是 JavaScript 原生格式,這意味著在 JavaScript 中處理JSON資料,不須要任何特殊的 API 或工具包。
3、JSON 獨立於語言:JSON 雖然使用 JavaScript來描述資料物件,但JSON 仍然獨立於JS。
4、JSON 解析器和 JSON 庫支援許多不同的程式語言。目前非常多的動態(PHP,JSP,.NET)程式語言都支援JSON。
5、對於 AJAX 應用程式來說,JSON 比 XML 更快更易使用
一、JSON的兩種資料結構 及操作
JSON 有兩種資料結構:物件、陣列。
JSON 語法是 JavaScript 語法的子集,所以操作同JS一樣。
1、物件
//簡單形式:
var o={"name":"bty","age":11,"time":"2009-08-20"};
//複雜形式:
var o2 = {
"list":[
{"password":"666","name":"bty"},
{"password":"422","name":"zsn"}],
"array":[
{"password":"123" ,"name":"bty"},
{"password":"452","name":"zsn"}]
};
注:{開始,}結束。名稱/值用 逗號 隔開。
名稱用 雙引號括 起來;值如果是字串則必須用 雙引號括號,數值型則不須要。
2、陣列
//簡單形式:
var jsonArr2 = ["Google", "Runoob", "Taobao"]
//複雜形式:
var jsonArr2 = [
{"name":"bty","age":11,"time":"2009-08-20"},
{"name":"zsn","age":10,"time":"2008-08-20" } ];
注:陣列是值(value)的有序集合。以“[”開始,“]”結束。值之間運用 “,”(逗號)分隔。
3、操作
以上面例子為例。
(1) 修改值: 同JS一樣
o2.list[0].name = "sam"; //修改物件屬性的值
jsonArr2[0].name = "sam"; //修改陣列元素的值
(2)刪除值: 同JS一樣
delete o2.list; //刪除物件屬性
delete jsonArr2[0]; //刪除陣列元素
delete jsonArr2[0].name; //刪除陣列元素屬性
二、JSON的關鍵
在資料傳輸流程中,json是以文字(即字串)的形式傳遞的,而JS操作的是JSON物件,所以JSON物件和JSON字串之間的相互轉換是關鍵。
區分JSON字串和JSON物件:
//JSON字串:
var str1 = '{ "name": "bty", "sex": "man" }';
//JSON物件:
var str2 = { "name": "zsh", "sex": "man" };
三、JSON字串與物件的轉換
1、JSON字串 轉換 為JSON物件
以上面str1為例
轉換有三種形式
//1)
var obj = eval('(' + str1 + ')');
//2)
var obj = str1.parseJSON();
//3)
var obj = JSON.parse(str1);
然後,就可以這樣讀取轉換後的資料:
alert(obj.name);
alert(obj.sex);
注:JSON.parse()和eval()方法的區別:JSON.parse()不僅可以解析json格式的資料,而且還會對要解析的字串進行格式檢查,如果格式不正確則不進行解析,而eval()則可以解析任何字串,eval是不安全的。
eval(string):函式可計算某個字串,並執行其中的的 JavaScript 程式碼。
eval()詳解:點選這裡
2、JSON物件 轉化 為JSON字串
//1)
var last=obj.toJSONString();
//2)
var last=JSON.stringify(obj);
alert(last);
四、例項
var str='[
{"name":"bty","sex":"man"},
{"name":"ZSN","sex":"girl"}
]'; //字串
var obj = str.parseJSON();//JSON字串轉JSON物件
alert(obj[0].name); //bty
日常專案JSON運用的難點 並不是通過網路請求接受到JSON資料,而是如何把接受到的JSON資料進行處理(轉換資料結構等)。
網路請求分配給客戶端的JSON資料一般都是 JSON字串,把JSON字串轉換為可操作的 JSON物件很容易(呼叫JSON.parse()或parseJSON()方法即可),但是往往轉換後的 JSON物件的資料格式或結構 並不符合 專案中API的要求,所以我們還要將該JSON物件的資料結構轉換為專案中 可用的資料結構,這才是難點。