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

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

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

<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="測試" />
</body>
</html>

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

<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="測試" />
</body>
</html>

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

<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="測試" />
</body>
</html>

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

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

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

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

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

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

<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="測試" />
</body>
</html>

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

相關文章

  • JSON 數據格式詳解

    JSON 數據格式詳解

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

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

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

    JSON與XML優(yōu)缺點對比分析

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

    深入分析jsonp協議原理

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

    JSON.stringify 語法實例講解

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

    淺談JSON5解決了JSON的兩大痛點

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

    json解析大全 雙引號、鍵值對不在一起的情況

    這篇文章主要介紹了json解析大全 雙引號、鍵值對不在一起的情況,需要的朋友可以參考下
    2019-12-12
  • 如何實現json數據可視化詳解

    如何實現json數據可視化詳解

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

    ASP Json Parser修正版

    之前因為要用json,在網上,json Generator就不少,但是,parser鮮有后來,在一個老外的啟發(fā)下,寫了一個praser,其實超簡單,就是利用了JS的eval來parse,然后,把對象再返回給vbscript代碼。
    2009-12-12
  • js實現刪除json中指定的元素

    js實現刪除json中指定的元素

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

最新評論