1. 程式人生 > >js讀取解析JSON資料

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物件的資料結構轉換為專案中 可用的資料結構,這才是難點。