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

資訊專(zhuān)欄INFORMATION COLUMN

Javascript JSON

Miyang / 428人閱讀

摘要:只是一種字符串?dāng)?shù)據(jù)格式,使用它的不僅僅是。對(duì)象在中,定義了全局對(duì)象。用于把對(duì)象序列化為字符串。這個(gè)方法可以使我們不必在乎語(yǔ)法與語(yǔ)法的差異,盡管創(chuàng)建合法的對(duì)象。用于把字符串序列化為值。

JSON只是一種字符串?dāng)?shù)據(jù)格式,使用它的不僅僅是Javascript。

語(yǔ)法

JSON可以表示三種類(lèi)型的值:簡(jiǎn)單值、對(duì)象、數(shù)組

簡(jiǎn)單值

以下是JSON可以辨識(shí)的簡(jiǎn)單值例子:

5
"Hello World!"
false
null

*注意:

undefined不被支持

字符串必須使用雙引號(hào),單引號(hào)會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤

對(duì)象

在Javascript中,我們可以用對(duì)象字面量的方式創(chuàng)建一個(gè)對(duì)象:

var person = {
    name: "Sue",
    age:  "18"
}

但JSON要求給屬性加雙引號(hào),上述對(duì)象轉(zhuǎn)換成合法的JSON字符串格式:

{
    "name": "Sue",
    "age":  "18"
}

*注意:

屬性加雙引號(hào)

沒(méi)有變量聲明

沒(méi)有末尾分號(hào)

屬性的值可以是前面介紹的簡(jiǎn)單值,也可以是對(duì)象或數(shù)組

2、3點(diǎn)同樣適用于簡(jiǎn)單值和數(shù)組

數(shù)組

在Javascript中,我們可以創(chuàng)建一個(gè)如下數(shù)組:

var names = ["Sue", "Jane", "Ben"]

上述數(shù)組轉(zhuǎn)換成合法的JSON字符串格式:

["Sue", "Jane", "Ben"]

我們可以將數(shù)組、簡(jiǎn)單值、對(duì)象嵌套使用,創(chuàng)建更加復(fù)雜的JSON字符串,比如:

{
    "teachers": [
        { "name": "Sue", "age": 18, "students": [1, 45, 60]},
        { "name": "Ben", "age": 25, "students": [2, 31, 40]}
    ],
    "students": [
        { "id": 1, "name": "Jane"},
        { "id": 2, "name": "Lee"}
    ]
}
解析與序列化

在JSON之前,web傳輸格式化數(shù)據(jù)都是使用XML,Javascript要想拿到XML中的數(shù)據(jù),要先將其轉(zhuǎn)換成DOM,而后從中提取數(shù)據(jù),相比之下,JSON就顯得非常簡(jiǎn)單。

eval

早期解析JSON一般使用eval(),比如:

eval({"name": "Sue"})
{name: "Sue"}

但這種方式存在風(fēng)險(xiǎn),因?yàn)榉?wù)器返回的數(shù)據(jù)很有可能存在惡意代碼,只要被解析成合法的Javascript語(yǔ)法,就會(huì)被執(zhí)行,比如:

eval("alert("Sue")")

因此不建議使用eval()來(lái)解析JSON字符串。
早期瀏覽器中,可以使用https://github.com/douglascro...。

JSON對(duì)象

在IE 8+、 Firefox 3.5+、 Safari 4+、 Chrome、Opera 10.5+中,ECMAScript定義了全局對(duì)象JSON。

stringify

用于把Javascript對(duì)象序列化為JSON字符串。
*注意:

值為undefined的屬性會(huì)被忽略

函數(shù)及原型成員會(huì)被忽略

不包含縮進(jìn)和空格字符(比如逗號(hào)后的空格)

舉個(gè)例子:

function Person(name, secret) {
    this.name = name;
    this.secret = secret;
    this.makeFriends = function() {
        return this.secret;
    }
}
Person.prototype.sayHi = function() {
    return this.name;
}
var me = new Person("Sue", undefined)
me.makeFriends()
// undefined
me.sayHi()
// "Sue"
var meJSON = JSON.stringify(me);
// "{"name":"Sue"}"

上述例子中,我們創(chuàng)建了一個(gè)Person實(shí)例me,其中secret屬性為undefined,包含makeFriends方法和一個(gè)原型成員sayHi,這些都沒(méi)有被添加到生成的JSON字符串中。
這個(gè)方法可以使我們不必在乎Javascript語(yǔ)法與JSON語(yǔ)法的差異,盡管創(chuàng)建合法的Javascript對(duì)象。

parse

用于把JSON字符串序列化為Javascript值。

var meCopy = JSON.parse(meJSON)
// {name: "Sue"}

*注意:memeCopy是兩個(gè)獨(dú)立的對(duì)象,實(shí)際編程中,可以使用stringify parse實(shí)現(xiàn)對(duì)象的拷貝。

stringify 選項(xiàng)

JSON.stringify()的第一個(gè)參數(shù)是要序列化的對(duì)象,后面還可以加兩個(gè)參數(shù),分別是過(guò)濾器和選項(xiàng)。

過(guò)濾器

過(guò)濾器可以是數(shù)組,也可以是函數(shù),如果是數(shù)組,JSON.stringify()的結(jié)果中將保留數(shù)組中的屬性,比如:

function Person(name, age, secret) {
    this.name = name;
    this.age = age;
    this.secret = secret;
}
var me = new Person("Sue", 18, "none");
var meJSON = JSON.stringify(me, ["name", "age"])
meJSON
// "{"name":"Sue","age":18}"

如果過(guò)濾器是一個(gè)函數(shù),會(huì)給這個(gè)函數(shù)傳入兩個(gè)參數(shù),分別是屬性名和屬性值,根據(jù)需要返回要添加到JSON中的屬性值,如果為undefined,會(huì)移除該屬性,比如:

var me = new Person("sue", 25, ["girl", "1024", "Beauty"])
function process(key, value) {
    switch(key) {
        case "name":
            return value.charAt(0).toUpperCase() + value.slice(1);
        case "age":
            return 18;
        case "secret":
            return undefined;
        default:
            return value;
    }
}
var meJSON = JSON.stringify(me, process)
meJSON
// "{"name":"Sue","age":18}"

字符串縮進(jìn)

第三個(gè)參數(shù)用于控制結(jié)果中的縮進(jìn)和空白符,如果這個(gè)參數(shù)是一個(gè)數(shù)值,那么它表示每個(gè)級(jí)別縮進(jìn)的空格數(shù),比如:

var meJSON = JSON.stringify(me, process, 4)
undefined
meJSON
"{
    "name": "Sue",
    "age": 18
}"

*注意:

只要傳入了縮進(jìn)數(shù),結(jié)果就會(huì)包含換行符,因?yàn)橹豢s進(jìn)卻不換行沒(méi)什么意義。

最大縮進(jìn)為10,如果超過(guò)10, 轉(zhuǎn)換為10

如果第三個(gè)參數(shù)是一個(gè)字符串,那么將使用這個(gè)字符串作為縮進(jìn),這個(gè)字符串可以是制表符或其他任意字符,如果超過(guò)10位,則僅前10位有效,比如:

var meJSON = JSON.stringify(me, process, "	")
meJSON
"{
    "name": "Sue",
    "age": 18
}"
var meJSON = JSON.stringify(me, process, "****")
meJSON
"{
****"name": "Sue",
****"age": 18
}"

toJSON

當(dāng)需要為某種對(duì)象添加自定義的序列化方法時(shí),可以給對(duì)象定義toJSON()方法,比如:

Person.prototype.toJSON = function() {
    return this.name;
}
var me = new Person("sue", 25, ["girl", "1024", "Beauty"])
JSON.stringify(me, process, "	")
// ""sue""

上述例子中,我們?cè)?b>Person的原型中添加了toJSON方法,發(fā)現(xiàn)調(diào)用JSON.stringify時(shí),只序列化了name屬性。
序列化的內(nèi)部順序如下:
No. 1 如果存在toJSON(),而且它能返回有效的值,則調(diào)用它,否則,返回對(duì)象本身
No. 2 如果提供了過(guò)濾器參數(shù),則基于第一步返回的值調(diào)用過(guò)濾器
No. 3 序列化第二步的返回值
No. 4 如果提供了縮進(jìn),則格式化第三步的返回值

parse 選項(xiàng)

JSON.parse()可以接收第二個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)還原函數(shù),將在每個(gè)鍵值對(duì)上調(diào)用,這個(gè)函數(shù)接收兩個(gè)參數(shù),分別是鍵和值,返回處理過(guò)的值,比如:

var birth = new Date(1993, 10, 24)
JSON.stringify(birth)
// ""1993-11-23T16:00:00.000Z""
var birthJSON = JSON.stringify(birth)
var birthCopy = JSON.parse(birthJSON, function(key, value) {
    return new Date(value)
})
birthCopy.getFullYear()
// 1993

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/94770.html

相關(guān)文章

  • JavaScriptJSON 和 JS 對(duì)象

    摘要:獨(dú)立于語(yǔ)言和平臺(tái),解析器和庫(kù)支持許多不同的編程語(yǔ)言。數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換為對(duì)象解析器函數(shù)創(chuàng)建包含語(yǔ)法的字符串使用解析器,解析文本并生成對(duì)象使用函數(shù)時(shí),必須為傳入的數(shù)據(jù)參數(shù)添加括號(hào),否則會(huì)報(bào)語(yǔ)法錯(cuò)誤。 區(qū)別 JSON(JavaScript Object Notation)僅僅是一種數(shù)據(jù)格式(或者叫數(shù)據(jù)形式)。數(shù)據(jù)格式其實(shí)就是一種規(guī)范,按照這種規(guī)范來(lái)存諸和交換數(shù)據(jù)。就好像 XML 格式一樣。 ...

    Miracle 評(píng)論0 收藏0
  • 5分鐘了解JSON那些事兒

    摘要:簡(jiǎn)介是對(duì)象表示法的縮寫(xiě)是一種數(shù)據(jù)格式而不是一種編程語(yǔ)言用來(lái)表示結(jié)構(gòu)化數(shù)據(jù)是的一個(gè)嚴(yán)格子集并不從屬于很多編程語(yǔ)言都可以用數(shù)據(jù)格式語(yǔ)法語(yǔ)法可以表示以下三種類(lèi)型的值簡(jiǎn)單值字符串?dāng)?shù)值布爾值但是不支持對(duì)象數(shù)組不支持變量函數(shù)對(duì)象實(shí)例簡(jiǎn)單值字符串?dāng)?shù)字布爾 JSON 簡(jiǎn)介 JSON是JavaScript Object Notation(JavaScript對(duì)象表示法)的縮寫(xiě) JSON是一種數(shù)據(jù)格式,...

    ad6623 評(píng)論0 收藏0
  • JavaScript對(duì)象和JSON

    摘要:,指的對(duì)象表示法,它本身是個(gè)字符串,是一種數(shù)據(jù)交換格式,并非對(duì)象。字符串必須使用雙引號(hào)表示,不能使用單引號(hào)。數(shù)組或?qū)ο笞詈笠粋€(gè)成員的后面,不能有逗號(hào)。不合法的會(huì)在解析成對(duì)象時(shí),出現(xiàn)錯(cuò)誤。替代方法對(duì)象下雖然提供了完整的字符串和對(duì)象的轉(zhuǎn)換方法。 JSON(JavaScript Object Notation),指JavaScript的對(duì)象表示法,它本身是個(gè)字符串,是一種數(shù)據(jù)交換格式,并非對(duì)...

    wuyumin 評(píng)論0 收藏0
  • 高程3總結(jié)#第20章JSON

    摘要:語(yǔ)法語(yǔ)法可以表示三種類(lèi)型的值簡(jiǎn)單值使用與相同的語(yǔ)法,可以在中表示字符串?dāng)?shù)值布爾值和。對(duì)象對(duì)象作為一種復(fù)雜數(shù)據(jù)類(lèi)型,表示的是一組無(wú)序的鍵值對(duì)兒。如果字符串長(zhǎng)度超過(guò)了個(gè),結(jié)果中將只出現(xiàn)前個(gè)字符。 JSON 語(yǔ)法 JSON語(yǔ)法可以表示三種類(lèi)型的值 簡(jiǎn)單值:使用與 JavaScript 相同的語(yǔ)法,可以在 JSON 中表示字符串、數(shù)值、布爾值和 null 。但 JSON 不支持 JavaS...

    Hwg 評(píng)論0 收藏0
  • 【快速入門(mén)系列】深入淺出JSON

    摘要:布爾值和也是有效的形式。同一個(gè)對(duì)象中絕對(duì)不應(yīng)該出現(xiàn)兩個(gè)同名屬性。序列化選項(xiàng)還可以接受兩個(gè)參數(shù),用于指定以不同方式序列化對(duì)象。當(dāng)傳入了有效縮進(jìn)參數(shù)值,結(jié)果字符串就會(huì)包含換行符。對(duì)第步返回的每個(gè)值進(jìn)行相應(yīng)的序列化。 前言 JSON(JavaScript Object Notation,JavaScript對(duì)象表示法)是JavaScript的一個(gè)嚴(yán)格的子集,利用了JavaScript中的一些...

    liangdas 評(píng)論0 收藏0
  • JavaScript JSON——“語(yǔ)法、解析與序列化”的注意要點(diǎn)

    摘要:對(duì)象對(duì)象作為一種復(fù)雜的數(shù)據(jù)類(lèi)型,表示的是一組有序的鍵值對(duì)。解析與序列化對(duì)象流行的最主要的原因是因?yàn)閿?shù)據(jù)結(jié)構(gòu)可以解析為的對(duì)象。為了改變序列化對(duì)象的結(jié)果,函數(shù)返回值就是相應(yīng)鍵的值。否則按照默認(rèn)順序執(zhí)行序列化。 語(yǔ)法 JSON可以表示一下三種類(lèi)型的值: 簡(jiǎn)單值:使用與js相同的語(yǔ)法可以在json中表示字符串、數(shù)值、布爾值和null。但是json不支持js的undefined。 對(duì)象:對(duì)象作...

    琛h。 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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