關於JS中的JSON


        早期,一般是使用XML作為互聯網上傳輸結構化數據的,但由於它解析麻煩,字符冗長,因此被輕量級的JSON所逐漸替代。JSON是JavaScript的一個嚴格子集,利用了JavaScript中一些模式來表示結構化的數據。可以直接將JSON格式的字符串傳遞給eval()進行處理,由於JSON是JS的子集,eval后變成json對象,可以使用’.’操作符直接操作屬性;

值得注意:JSON是一種數據格式,不是一種語言,雖然與JS中定義對象字面量的形式相似,但JSON不從屬於JavaScript,因為其它語言(如:PHP,JSP)中也有針對JSON的解析和序列化的方法操作。

語法

     JSON可以表示以下三種值:

  • 簡單值:如字符串、數值、布爾值和null,但不支持undefined
  • 對象:對象作為一種復雜的數據類型,表示是一組無序的鍵值對兒,值可以是簡單值也可以復雜的數據
  • 數組:數組作為一種復雜的數據類型,表示是一組有序的列表兒,可以通過索引來獲取引用的值,值可以是簡單值,也可以復雜數據對象

一個簡單的JSON示例:

{
    "name": "Jack",
    "age": 30,
    "isMan": true,
    "school": {
        "name": "Lonton University",
        "location": "English"
    }
}

非常重要:JSON對象的屬性(如上例中的“name”)必須加雙引號

在實際使用中,經常會因為上面使用單引號或不使用引號造成序死化錯誤,從而無法生成JSON對象

序列化

     JSON被大家所認可,除了語法是JavaScript語法子集,更主要是可以直接eval序列化(但有一定風險,可能會執行一些惡意代碼,如讀cookie等)成可用的JS對象直接使用。ECMAScript 5對解析JSON進行規范,定義了全局對象JSON,支持的瀏覽器有:IE8+,Firefox 3.5+,Safari4+,Chrome和Opera 10.5+;

     JSON對象提供兩個方法:stringify()和parse(),stringify()是將JSON對象轉成字符串,而parse()則是將符合規范的字符串轉成可用JSON對象。

stringify()

JSON.stringify(value [, replacer] [, space])

      value:JSON對象。
      replacer:過濾器(可選的),可以是方法或數組,用於過濾操作,如果是數組,則序列化字符串只包含數組中指定的值的JSON屬性及屬性值,如果是方法,方法傳遞key,value,可以對JSON對象每一個屬性值及值進行處理后返回。

      space:是否保留縮進,默認不保留,並且刪除所有換行。

1.如果省略的話,那么顯示出來的值 就沒有分隔符。直接輸出來
2.如果是一個數字的話,那么它就定義縮進幾個字符,當然 如果大於10 ,則最大值為10.
3.如果是一些轉義字符,比如“\t”,表示回車,那么它每行一個回車。
4.如果僅僅是字符串,OK,就在每行輸出值的時候把這些字符串附加上去就OK。當然,最大長度也是10個字符。

       實例:

var student = new Object(); 
student.name = "Lanny"; 
student.age = "25"; 
student.location = "China"; 
var json = JSON.stringify(student); 
alert(json); //{"name":"Lanny","age":"25","location":"China"}

      使用數組過濾,只保留:name及locaiton

var json = JSON.stringify(student,["name","location"]);
alert(json);//{"name":"Lanny","location":"China"}

      使用函數過濾,對於name屬性值單獨處理,在之前輸出:”my name is :”

var json = JSON.stringify(student, function (key, value) {
    switch (key){
        case "name":
            return "my name is " + value;
        default :
            return value;
    }
});
alert(json);//{"name":"my name is Lanny","age":"25","location":"China"}

      使用縮進,縮進4個空白:

var json = JSON.stringify(student,null,4);
alert(json);
//返回結果如下:
{
    "name": "Lanny",
    "age": "25",
    "location": "China"
}

parse()

JSON.parse(text [, reviver])

參數

          text :必需。 一個有效的 JSON 字符串。 

           reviver :可選。 一個轉換結果的函數。 將為對象的每個成員調用此函數。 如果成員包含嵌套對象,則先於父對象轉換嵌套對象。 對於每個成員,會發生以下情況:

如果 reviver 返回一個有效值,則成員值將替換為轉換后的值。

如果 reviver 返回它接收的相同值,則不修改成員值。

如果 reviver 返回 null 或 undefined,則刪除成員。

返回值:一個對象或數組

示例:

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}'; 
var contact = JSON.parse(jsontext);

以下示例演示了如何使用 JSON.stringify 將數組轉換成 JSON 字符串,然后使用 JSON.parse 將該字符串還原成數組。

var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
document.write(str);
document.write ("<br/>");
var newArr = JSON.parse(str);
while (newArr.length > 0) {
    document.write(newArr.pop() + "<br/>");
}
// Output:
var arr = ["a", "b", "c"];
var str = JSON.stringify(arr);
document.write(str);
document.write ("<br/>");
 
var newArr = JSON.parse(str);
 
while (newArr.length > 0) {
    document.write(newArr.pop() + "<br/>");
}
 
// Output:
["a","b","c"]
c
b
a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM