欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js解析與序列化json數(shù)據(jù)(二)序列化探討

 更新時(shí)間:2013年02月01日 12:09:49   作者:  
上一節(jié)我們講解了JSON.stringify()的基本用法,這一節(jié)我們來重點(diǎn)探討一下序列化,單獨(dú)或組合使用這兩個(gè)參數(shù)(過濾器/數(shù)組),可以更全面深入地控制JSON的序列化,感興趣的朋友可以了解下,或許對(duì)你學(xué)習(xí)json有所幫助
上一節(jié)我們講解了JSON.stringify()的基本用法,這一節(jié)我們來重點(diǎn)探討一下序列化。
JSON.stringify()除了要序列化的js對(duì)象外,還可以接收另外兩個(gè)參數(shù),這兩個(gè)參數(shù)用于指定不同方式序列化js對(duì)象。第一個(gè)參數(shù)是過濾器,可以使一個(gè)數(shù)組,也可以是一個(gè)函數(shù);第二個(gè)參數(shù)是一個(gè)選項(xiàng),表示是否在JSON字符串中保留縮進(jìn)。單獨(dú)或組合使用這兩個(gè)參數(shù),可以更全面深入地控制JSON的序列化。
1、過濾結(jié)果
如果過濾器參數(shù)是數(shù)組,那么JSON.stringify()的結(jié)果中將只包含數(shù)組中列出的屬性。如:
復(fù)制代碼 代碼如下:

<html>
<head>
<title></title>
<script type="text/javascript">
function init()
{
var student={
name:"Bill",
age:12,
grade:3,
id:"0802020114"
};
var jsonText=JSON.stringify(student,["name","id"]);
}
</script>
</head>
<body>
<input type="button" onclick="init()" value="測(cè)試" />
</body>
</html>

jsonText的值為
{"name":"Bill","id":"802020114"}
如果第二個(gè)參數(shù)是函數(shù),行為會(huì)有一點(diǎn)不同。傳入的函數(shù)接收兩個(gè)參數(shù),屬性(鍵)名和屬性值。根據(jù)屬性(鍵)名可以知道應(yīng)該如何處理要序列化的對(duì)象中的屬性。屬性名只能是字符串。
為了改變序列化對(duì)象的結(jié)果,函數(shù)返回的值就是相應(yīng)鍵的值。不過要注意,如果函數(shù)返回了undefined,那么相應(yīng)的屬性會(huì)被忽略。如:
復(fù)制代碼 代碼如下:

<html>
<head>
<title></title>
<script type="text/javascript">
function init()
{
var student={
name:"Bill",
age:12,
grade:3,
id:"0802020114",
subject:["math","Chinese","English"]
};
var jsonText=JSON.stringify(student,jsonConvert);
}
function jsonConvert(key,value)
{
switch (key)
{
case "name":
return "Lily";
case "grade":
return undefined;
case "subject":
return value.join(",");
default :
return value;
}
}
</script>
</head>
<body>
<input type="button" onclick="init()" value="測(cè)試" />
</body>
</html>

這里函數(shù)過濾器根據(jù)傳入的鍵來決定結(jié)果。如果鍵為name,就將其值設(shè)置為L(zhǎng)ily;如果為grade就返回undefined來刪除該屬性;如果為subject,它是一個(gè)數(shù)組,就將它通過數(shù)組方法join()轉(zhuǎn)化為以逗號(hào)連接的字符串。最后一定要提供default項(xiàng),使其他的值都能夠正常出現(xiàn)在結(jié)果中,不然就會(huì)出錯(cuò),沒有結(jié)果。實(shí)際上,第一次調(diào)用這個(gè)函數(shù)過濾器,傳入的鍵是一個(gè)空字符串,而值就是student對(duì)象。上面的jsonText的值如下:
{"name":"Lily","age":12,"id":"0802020114","subject":"math,Chinese,English"}
在內(nèi)部是按順序遍歷每一個(gè)對(duì)象每一個(gè)屬性,所以公開key,value函數(shù)方法需要注意你的函數(shù)只有著兩個(gè)參數(shù)才能起效,要理解函數(shù)的目的,就是在內(nèi)部機(jī)制遍歷每一個(gè)屬性的時(shí)候讓你來修改部分結(jié)果,并且是一次遍歷每一個(gè)對(duì)象,這樣在序列化對(duì)象中每一個(gè)對(duì)象都要經(jīng)過過濾器。
2、字符串縮進(jìn)
JSON.stringify()方法的第三個(gè)參數(shù)用于控制結(jié)果中的縮進(jìn)和空白符。如果這個(gè)參數(shù)是一個(gè)數(shù)值,那么它表示的是每個(gè)級(jí)別縮進(jìn)的空格數(shù)。如:
復(fù)制代碼 代碼如下:

<html>
<head>
<title></title>
<script type="text/javascript">
function init()
{
var student={
name:"Bill",
age:12,
grade:3,
id:"0802020114",
subject:["math","Chinese","English"]
};
var jsonText=JSON.stringify(student,null,8);
}
</script>
</head>
<body>
<input type="button" onclick="init()" value="測(cè)試" />
</body>
</html>

保存在jsonText中的字符串為:
復(fù)制代碼 代碼如下:

{
"name": "Bill",
"age": 12,
"grade": 3,
"id": "0802020114",
"subject": [
"math",
"Chinese",
"English"
]
}

JSON.stringify()在結(jié)果字符串中插入了換行符以提高可讀性。只要傳入有效的控制縮進(jìn)的參數(shù)值,結(jié)果字符串就會(huì)包含換行符(只縮進(jìn)而不換行意義不大)。最大縮進(jìn)空格數(shù)位10,所有大于10的值都會(huì)自定轉(zhuǎn)換為10。

如果縮進(jìn)參數(shù)是一個(gè)字符串而非數(shù)值,則這個(gè)字符串將在JSON字符串中被用作縮進(jìn)字符(不再使用空格)。如可以實(shí)現(xiàn)如下的效果:
復(fù)制代碼 代碼如下:

{
*"name": "Bill",
*"age": 12,
*"grade": 3,
*"id": "0802020114",
*"subject": [
**"math",
**"Chinese",
**"English"
*]
}

同樣字符串最長(zhǎng)不能超過10個(gè)字符長(zhǎng)。如果超過,結(jié)果中將只出現(xiàn)10個(gè)字符。
3、toJSON()方法
有時(shí)候JSON.stringify()還是不能滿足對(duì)某些對(duì)象進(jìn)行自定義序列化的需求。在這些情況下,可以通過對(duì)象上調(diào)用toJSON()方法,返回其自身的JSON數(shù)據(jù)格式。如:
復(fù)制代碼 代碼如下:

<html>
<head>
<title></title>
<script type="text/javascript">
function init()
{
var student={
name:"Bill",
age:12,
grade:3,
id:"0802020114",
subject:["math","Chinese","English"],
toJSON:function(){
return this.name+"_"+this.id;
}
};
var jsonText=JSON.stringify(student);
}
</script>
</head>
<body>
<input type="button" onclick="init()" value="測(cè)試" />
</body>
</html>

以上代碼在student對(duì)象上定義了一個(gè)toJSON()方法,該方法返回name和id的組合。最后jsonText的值如下:
"Bill_0802020114"
toJSON()可以作為函數(shù)過濾器的補(bǔ)充,因此理解序列化的內(nèi)部順序十分重要。假設(shè)把一個(gè)對(duì)象傳入JSON.stringify(),序列化該對(duì)象的順序是:
(1)如果存在toJSON()方法而且能夠通過它取得有效值,則調(diào)用該方法。否則,按默認(rèn)順序執(zhí)行序列化。
(2)如果提供了第二個(gè)參數(shù),應(yīng)用這個(gè)函數(shù)過濾器。傳入函數(shù)過濾器的值是第(1)步返回的值。
(3)對(duì)第(2)步返回的每個(gè)值進(jìn)行相應(yīng)的序列化。
(4)如果提供了第三個(gè)參數(shù),執(zhí)行相應(yīng)的格式化。
無論是考慮滴定toJSON()方法,還是考慮使用函數(shù)過濾器,或者需要同時(shí)使用兩者,理解這個(gè)順序都是至關(guān)重要的。

相關(guān)文章

  • JSON 數(shù)據(jù)格式詳解

    JSON 數(shù)據(jù)格式詳解

    JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON采用完全獨(dú)立于語言的文本格式,這些特性使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成
    2017-09-09
  • JSON 入門指南 想了解json的朋友可以看下

    JSON 入門指南 想了解json的朋友可以看下

    JSON 即 JavaScript Object Natation,它是一種輕量級(jí)的數(shù)據(jù)交換格式,非常適合于服務(wù)器與 JavaScript 的交互。本文將快速講解 JSON 格式,并通過代碼示例演示如何分別在客戶端和服務(wù)器端進(jìn)行 JSON 格式數(shù)據(jù)的處理。
    2009-08-08
  • JSON與XML優(yōu)缺點(diǎn)對(duì)比分析

    JSON與XML優(yōu)缺點(diǎn)對(duì)比分析

    本文從各個(gè)方面向大家對(duì)比展示了json和xml的優(yōu)缺點(diǎn),十分的全面細(xì)致,有需要的小伙伴可以參考下。
    2015-07-07
  • 深入分析jsonp協(xié)議原理

    深入分析jsonp協(xié)議原理

    JSONP的最基本的原理是:動(dòng)態(tài)添加一個(gè)<script>標(biāo)簽,而script標(biāo)簽的src屬性是沒有跨域的限制的。這樣說來,這種跨域方式其實(shí)與ajax XmlHttpRequest協(xié)議無關(guān)了。
    2015-09-09
  • JSON.stringify 語法實(shí)例講解

    JSON.stringify 語法實(shí)例講解

    可能有些人對(duì)系列化這個(gè)詞過敏,我的理解很簡(jiǎn)單。就是說把原來是對(duì)象的類型轉(zhuǎn)換成字符串類型(或者更確切的說是json類型的)。就這么簡(jiǎn)單。打個(gè)比方說,你有一個(gè)類,那么你可以通過這個(gè)方法轉(zhuǎn)換成相應(yīng)的json類型的
    2012-03-03
  • 淺談JSON5解決了JSON的兩大痛點(diǎn)

    淺談JSON5解決了JSON的兩大痛點(diǎn)

    這篇文章主要介紹了淺談JSON5解決了JSON的兩大痛點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • json解析大全 雙引號(hào)、鍵值對(duì)不在一起的情況

    json解析大全 雙引號(hào)、鍵值對(duì)不在一起的情況

    這篇文章主要介紹了json解析大全 雙引號(hào)、鍵值對(duì)不在一起的情況,需要的朋友可以參考下
    2019-12-12
  • 如何實(shí)現(xiàn)json數(shù)據(jù)可視化詳解

    如何實(shí)現(xiàn)json數(shù)據(jù)可視化詳解

    最近在工作中開發(fā)一個(gè)內(nèi)部功能時(shí)碰到的一個(gè)需求,要把json數(shù)據(jù)在頁面上展示出來,平時(shí)瀏覽器會(huì)安裝jsonView這樣的擴(kuò)展來看json數(shù)據(jù),但是程序要用到的話該怎么辦呢?今天在網(wǎng)上搜索的時(shí)候,發(fā)現(xiàn)了這個(gè)小技巧,分享給大家,有需要的朋友們可以參考借鑒,下面來一起看看吧
    2016-11-11
  • ASP Json Parser修正版

    ASP Json Parser修正版

    之前因?yàn)橐胘son,在網(wǎng)上,json Generator就不少,但是,parser鮮有后來,在一個(gè)老外的啟發(fā)下,寫了一個(gè)praser,其實(shí)超簡(jiǎn)單,就是利用了JS的eval來parse,然后,把對(duì)象再返回給vbscript代碼。
    2009-12-12
  • js實(shí)現(xiàn)刪除json中指定的元素

    js實(shí)現(xiàn)刪除json中指定的元素

    這篇文章主要介紹了js實(shí)現(xiàn)刪除json中指定的元素,需要的朋友可以參考下
    2020-09-09

最新評(píng)論