国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JSON 筆記

Kahn / 1225人閱讀

摘要:全稱為對象表示法,它利用與對象相似的表示方法來表示數(shù)據(jù)。但是要注意的是不能表示當(dāng)中的一種特殊值。對象,與對象相似,表示無序的鍵值對。但是由于存在安全的風(fēng)險(xiǎn),因此在開始有了一個(gè)新的全局對象對象用來處理。輸出的字符串會(huì)受到該函數(shù)的返回值影響。

JSON 全稱為 JavaScript Object Notation(JavaScript對象表示法),它利用與 JavaScript 對象相似的表示方法來表示數(shù)據(jù)。雖然 JSON 脫胎于 JavaScript,但是 JSON 并不屬于 JavaScript 的一部分,很多的語言都可以解析和序列化 JSON。

JSON 語法

JSON 可以表示以下三種類型的值:

簡單值

對象

數(shù)組

簡單值包括字符串、數(shù)值、布爾值和 null。但是要注意的是 JSON 不能表示 JavaScript 當(dāng)中的一種特殊值 undefinde

對象,與 JavaScript對象相似,表示無序的鍵值對。鍵值對中的值可以是簡單值,也可以是對象或數(shù)組。

數(shù)組,與 JavaScript數(shù)組相似,表示一組有序的值,數(shù)組的值可以是簡單值,也可以是對象或數(shù)組。

舉個(gè)例子:

{
    "name": "acwong",
    "age": 23,
    "address": {
        "province": "GuangDong",
        "city": "GuangZhou"
    },
    "friends": ["bc", "cc", "dc"],
    "blog": "http://acwong.org"
}

需要注意的是,也是與 JavaScript對象表示方法的不同之處,JSON 字符串當(dāng)中對象的屬性必須加上雙引號

// 正確示范
{
    "name": "acwong"
}

// 錯(cuò)誤示范
{
    name: "acwong"
}
// 單引號也是錯(cuò)誤的
{
    "name": "acwong"
}
JavaScript 與 JSON JSON 對象

在 JSON 誕生之初 JavaScript 處理 JSON 的方式基本就靠 eval() 函數(shù)。

eval() 函數(shù)可以解析 JSON 然后返回 JavaScript 數(shù)組。但是由于 eval() 存在安全的風(fēng)險(xiǎn),因此在 EMCAScript 5 開始有了一個(gè)新的全局對象 JSON對象用來處理 JSON。

序列化 JSON

JavaScript 使用 JSON對象的 stringify() 方法來序列化 JSON。

var person = {
    name: "acwong",
    age: 23,
    address: {
        province: "GuangDong",
        city: "GuangZhou"
    },
    friends: ["bc", "cc", "dc"],
    blog: "http://acwong.org"
};

var jsonText = JSON.stringify(person);

console.log(jsonText);
// {"name":"acwong","age":23,"address":{"province":"GuangDong","city":"GuangZhou"},"friends":["bc","cc","dc"],"blog":"http://acwong.org"}

JSON.stringify() 方法在默認(rèn)情況下輸出的 JSON字符串不包含空格字符和縮進(jìn)。

如果 JavaScript對象當(dāng)中包含不被 JSON 支持的類型(如:undefined,函數(shù))會(huì)自動(dòng)被 stringigy() 方法忽略。

var person = {
    name: "acwong",
    blog: undefined,
    todo: function() {
        return "sleep";
    }
};

var jsonText = JSON.stringify(person);

console.log(jsonText);
// {"name":"acwong"}

JSON.stringify() 方法包含三個(gè)參數(shù),第一個(gè)參數(shù)就是要序列化的 JavaScript對象。第二個(gè)參數(shù)完成過濾輸出結(jié)果功能。第三個(gè)參數(shù)控制輸出字符串的縮進(jìn)

過濾輸出結(jié)果

第二個(gè)參數(shù)完成過濾輸出結(jié)果功能。

當(dāng)傳入的第二個(gè)參數(shù)為數(shù)組時(shí),輸出的 JSON字符串只會(huì)保留包含在該數(shù)組里面的屬性值。

var person = {
    name: "acwong",
    age: 23,
    address: {
        province: "GuangDong",
        city: "GuangZhou"
    },
    friends: ["bc", "cc", "dc"],
    blog: "http://acwong.org"
};

var jsonText = JSON.stringify(person, ["name","blog"]);

console.log(jsonText);
// {"name":"acwong","blog":"http://acwong.org"}

當(dāng)傳入的第二個(gè)參數(shù)為函數(shù),該函數(shù)包含兩個(gè)參數(shù),分別是 JavaScript對象的屬性名和屬性值。輸出的 JSON字符串會(huì)受到該函數(shù)的返回值影響。

// 省略 person對象
var jsonText = JSON.stringify(person, function(key, value) {
    if (key === "name") {
        return "ac";
    } else if (key === "age") {
        value++;
        return value;
    } else {
        return value;
    }
});

console.log(jsonText);
// {"name":"ac","age":24,"address":{"province":"GuangDong","city":"GuangZhou"},"friends":["bc","cc","dc"],"blog":"http://acwong.org"}
控制縮進(jìn)

第三個(gè)參數(shù)控制輸出字符串的縮進(jìn)

當(dāng)?shù)谌齻€(gè)參數(shù)傳入一個(gè)數(shù)值的時(shí)候,表示輸出字符串縮進(jìn)的空格數(shù)。

// 省略 person對象
var jsonText = JSON.stringify(person, null, 2);

console.log(jsonText);
// 輸出
{
  "name": "acwong",
  "age": 23,
  "address": {
    "province": "GuangDong",
    "city": "GuangZhou"
  },
  "friends": [
    "bc",
    "cc",
    "dc"
  ],
  "blog": "http://acwong.org"
}

當(dāng)?shù)谌齻€(gè)參數(shù)傳入一個(gè)字符串時(shí),輸出結(jié)果會(huì)以該字符串作為縮進(jìn)符號。

// 省略 person對象

// 使用 * 號縮進(jìn)
var jsonText = JSON.stringify(person, null, "*");

console.log(jsonText);
// 輸出
 {
*"name": "acwong",
*"age": 23,
*"address": {
**"province": "GuangDong",
**"city": "GuangZhou"
*},
*"friends": [
**"bc",
**"cc",
**"dc"
*],
*"blog": "http://acwong.org"
}
// 省略 person對象

// 使用制表符(Tab)縮進(jìn)
var jsonText = JSON.stringify(person, null, "	");

console.log(jsonText);
// 輸出
 {
    "name": "acwong",
    "age": 23,
    "address": {
        "province": "GuangDong",
        "city": "GuangZhou"
    },
    "friends": [
        "bc",
        "cc",
        "dc"
    ],
    "blog": "http://acwong.org"
}
自定義序列化

如果上述的方法都不能滿足要求,還可以在要序列化的 JavaScript對象當(dāng)中加入 toJSON() 函數(shù),可以返回任何想返回的值。

var person = {
    name: "acwong",
    age: 23,
    address: {
        province: "GuangDong",
        city: "GuangZhou"
    },
    friends: ["bc", "cc", "dc"],
    blog: "http://acwong.org",
    toJSON: function() {
        this.name = "ac";
        return "yoyo " + this.name;
    }
};

var jsonText = JSON.stringify(person);

console.log(jsonText);
//  "yoyo ac"
解析 JSON

JavaScript 使用 JSON對象的 parse() 方法來解析 JSON。

var jsonText = "{"name":"acwong","age":23,"address":{"province":"GuangDong","city":"GuangZhou"},"friends":["bc","cc","dc"],"blog":"http://acwong.org"}";

var person = JSON.parse(jsonText);

console.log(person);

JSON.parse() 同樣可以傳入一個(gè)函數(shù)作為參數(shù),對鍵值對進(jìn)行操作。

var jsonText = "{"name":"acwong","age":23,"blog":"http://acwong.org"}";

var person = JSON.parse(jsonText);

console.log(person);

JSON 的好處

與 XML 一樣可以表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。

比 XML 輕量得多。

語法簡單易懂。

由于其輕量級,在傳輸?shù)臅r(shí)候占用的資源相對較少。

感謝您的閱讀,有不足之處請為我指出。

參考

JavaScript高級程序設(shè)計(jì)(第3版)

本文同步于我的個(gè)人博客 http://blog.acwong.org/2015/03/05/json-notes/

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/91487.html

相關(guān)文章

  • JSON 讀書筆記

    摘要:解析器和庫支持許多不同的編程語言。每個(gè)對象代表一條關(guān)于某人有姓和名的記錄。使用解析器將轉(zhuǎn)換為對象是更安全的做法。解析器只能識(shí)別文本,而不會(huì)編譯腳本。在瀏覽器中,這提供了原生的支持,而且解析器的速度更快。注意的字符串連接的規(guī)則利用解析器 JSON JSON:JavaScript 對象表示法(JavaScript Object Notation)。 JSON 是存儲(chǔ)和交換文本信息的語法。類...

    lewinlee 評論0 收藏0
  • JS筆記!Map 與其他數(shù)據(jù)結(jié)構(gòu)的互相轉(zhuǎn)換

    摘要:與其他數(shù)據(jù)結(jié)構(gòu)的互相轉(zhuǎn)換僅作為一個(gè)學(xué)習(xí)筆記供往后翻閱轉(zhuǎn)為數(shù)組轉(zhuǎn)為數(shù)組最方便的方法,就是使用擴(kuò)展運(yùn)算符。對象轉(zhuǎn)為轉(zhuǎn)為轉(zhuǎn)為要區(qū)分兩種情況。轉(zhuǎn)為轉(zhuǎn)為,正常情況下,所有鍵名都是字符串。這往往是數(shù)組轉(zhuǎn)為的逆操作。 Map 與其他數(shù)據(jù)結(jié)構(gòu)的互相轉(zhuǎn)換 PS:僅作為一個(gè)學(xué)習(xí)筆記供往后翻閱! (1)Map 轉(zhuǎn)為數(shù)組Map 轉(zhuǎn)為數(shù)組最方便的方法,就是使用擴(kuò)展運(yùn)算符(...)。 const myMap = ...

    Jenny_Tong 評論0 收藏0
  • JavaScript高級程序設(shè)計(jì)-摘要筆記-6

    摘要:關(guān)于對象定義了全局對象。支持的瀏覽器有除了接受要序列化的對象外,還可以接受另外兩個(gè)參數(shù)。如果是數(shù)值,則表示每個(gè)級別縮進(jìn)的空格數(shù),最大,超過的值自動(dòng)轉(zhuǎn)換成。字符串長度超過,結(jié)果中將只出現(xiàn)前個(gè)字符。會(huì)在結(jié)果字符串中插入換行符提高可讀性。 關(guān)于JSON 1. JSON 對象 es5 定義了全局對象 JSON。支持的瀏覽器有 IE8+ 、Firefox 3.5+ 、Safari 4+、Chro...

    Batkid 評論0 收藏0
  • JSON Web Token學(xué)習(xí)筆記

    摘要:一什么是為什么使用是機(jī)制的一種替代方案。這種情況下使用就會(huì)有更加方便。的數(shù)據(jù)結(jié)構(gòu)一般為三部分組成頭部一般包含簽名的算法和令牌的屬性負(fù)載實(shí)際需要傳遞的數(shù)據(jù)一般不加密,因此不要把重要信息放在里面簽名部分是對前兩部分的簽名,防止數(shù)據(jù)篡改。 一、什么是JSON Web Token? 1、為什么使用JSON Web Token JSON Web Token是cookie session機(jī)制的一種...

    cangck_X 評論0 收藏0
  • JSON學(xué)習(xí)筆記(一)

    先學(xué)習(xí)阮大神的 數(shù)據(jù)類型和Json格式 一、js中解析JSON的方式 eval() JSON.parse var jsondata = {staff:[{name:小紅,age:16},{name:小明,age:20},{name:小芳,age:18}]} var jsonobj = eval(( + jsondata + )) alert( jsonobj.staff[0].name); s...

    Scott 評論0 收藏0
  • 工作筆記1:將JS數(shù)組轉(zhuǎn)換成json

    摘要:背景這幾天調(diào)到后臺(tái)組,搞后臺(tái)開發(fā),開發(fā)中碰到頁面拼裝到后臺(tái)的如下所示多選的數(shù)據(jù)是數(shù)組的方式,手動(dòng)將數(shù)組轉(zhuǎn)換成串又嫌麻煩,后來發(fā)現(xiàn)這一神器,只需要一行代碼,就能把數(shù)組轉(zhuǎn)成。 本文僅作為個(gè)人學(xué)習(xí)總結(jié)記錄使用!能力有限,難免會(huì)有疏漏和錯(cuò)誤,還望指出。共同進(jìn)步。 背景 這幾天調(diào)到后臺(tái)組,搞web后臺(tái)開發(fā),開發(fā)中碰到頁面拼裝JSON到后臺(tái)的CASE 如下所示:showImg(http://se...

    ymyang 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<