JSON


title: JSON
date: 2016-11-8
tags: JavaScript編程


0x00 JSON

JSON(JavaScript Object Notation, JavaScript對象表示法)。json

JSON 利用了 JS 中的一些模式來表示結構化數據。數組

JSON 是一種數據格式,而不編程語言。數據結構

JSON 能夠表示三種類型的值,簡單值,對象數組編程語言

對於簡單值,在JS中,JSON 能夠表示,字符串,數值,布爾值,null,可是不支持JS 中的特殊值 undefined。函數

JSON 不支持變量,函數或對象實例。code


使用 JSON 表示對象

//JSON 中的對象
{   "name":"Jack",
    "age":29,
    "school":{
        "name":"huaxin school",
        "location":"china"
    }
}

//JS 中的對象
var object = {
    "name":"Macil",
    "age":29
};

在 JSON 中表示對象時必須給對象的屬性添加雙引號。此外,沒有聲明變量,其次,末尾沒有分號。對象


JSON 表示數組

JSON 中數組採用的是 JS 中數組的字面量形式。ip

[24,"hello",false]

一樣的,JSON 中數組也沒有變量好分號。ci

把數字和對象結合起來,即可以構成複雜的數據集合。


0x01 解析和序列化

JSON 數據結構能夠被解析爲有用的 JS 對象,這也是 JSON 成爲 Web 服務開發中交互數據的事實標準的重要緣由。

JSON 對象有兩個方法: stringify()parse()

stringify():把 JS 對象序列化爲 JSON 字符串
parse():把 JSON 字符串解析爲原生的 JS 值


JSON.stringify()

JSON.stringify() 除了要序列化的 JS 對象外,還能夠接受另外兩個參數。須要添加的第二個參數是過濾器,能夠是數組(數組過濾器)或者函數(函數過濾器)。第三個參數表示,是否在 JSON 字符串中保留縮進。

數組過濾器

若是過濾器參數是數組,那麼 JSON.stringify() 的結果中將只包含數組中列出的屬性。

var books = {
    "title":"挪威的森林",
    "authors":["村上春樹"],
    "edition":3,
    "year":2011
};

var jsonText = JSON.stringify(books,["title","edition"]);
console.log(jsonText);
//{"title":"挪威的森林","edition":3}
函數過濾器

函數過濾器中的函數接受兩參數:屬性名屬性值,而屬性名只能是字符串。

函數過濾器會根據傳入的鍵來決定返回的結果。但如果函數返回了 undefined 那麼相應的屬性會被忽略。

var books = {
   "title":"挪威的森林",
   "authors":["村上春樹","芥川龍之介","松下幸之助","太宰治"],
   "edition":3,
   "year":2011
};

var jsonText = JSON.stringify(books,function(key,value){
   switch(key){
       case "authors":
           return value.join(",");
       case "year":
           return 50000;
       case "edition":
           return undefined;
       default :
           return value;
   }
});
console.log(jsonText);
//{"title":"挪威的森林","authors":"村上春樹,芥川龍之介,松下幸之助,太宰治","year":50000}
字符縮進

JSON.stringify() 的第上參數能夠爲數字或者任意字符。分別表示要縮進的空格數和用來表示的縮進字符串(再也不使用空格)

var jsonText = JSON.stringify(book,null,"---");

JSON.parse()

JSON.stringigy() 方法對應,JSON.parse() 能夠接受一個函數做爲還原函數(reviver),它也一樣接收兩參數,一個鍵和一個值。

若是還原函數返回 undefined 則表示要在結果中刪除相應的鍵。

在將日期對象轉換爲 Date 對象時,便常用到還原函數了。

var books = {
    "title":"挪威的森林",
    "authors":["村上春樹","芥川龍之介","松下幸之助","太宰治"],
    "edition":3,
    "year":2011,
    "releaseDate":new Date(2016,11,8)
};

var jsonText = JSON.stringify(books,function(key,value){
    switch(key){
        case "authors":
            return value.join(",");
        case "year":
            return 50000;
        case "edition":
            return undefined;
        default :
            return value;
    }
});

var bookCopy = JSON.parse(jsonText,function(key,value){
    if (key == "releaseDate"){
        return new Date(value);
    } else {
        return value;
    }
})
相關文章
相關標籤/搜索