JavaScript之json的示例分析

這篇文章主要介紹了JavaScript之json的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都成都三維植被網(wǎng)小微創(chuàng)業(yè)公司專業(yè)提供成都定制網(wǎng)站營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。

JSON是JavaScript Object Notation的縮寫,它是一種數(shù)據(jù)交換格式。

在JSON出現(xiàn)之前,大家一直用XML來傳遞數(shù)據(jù)。因為XML是一種純文本格式,所以它適合在網(wǎng)絡(luò)上交換數(shù)據(jù)。XML本身不算復(fù)雜,但是,加上DTD、XSD、XPath、XSLT等一大堆復(fù)雜的規(guī)范以后,任何正常的軟件開發(fā)人員碰到XML都會感覺頭大了,最后大家發(fā)現(xiàn),即使你努力鉆研幾個月,也未必搞得清楚XML的規(guī)范。

終于,在2002年的一天,道格拉斯·克羅克福特(Douglas Crockford)同學(xué)為了拯救深陷水深火熱同時又被某幾個巨型軟件企業(yè)長期愚弄的軟件工程師,發(fā)明了JSON這種超輕量級的數(shù)據(jù)交換格式。

道格拉斯同學(xué)長期擔(dān)任雅虎的高級架構(gòu)師,自然鐘情于JavaScript。他設(shè)計的JSON實(shí)際上是JavaScript的一個子集。在JSON中,一共就這么幾種數(shù)據(jù)類型:

  1. number:和JavaScript的number完全一致;

  2. boolean:就是JavaScript的truefalse;

  3. string:就是JavaScript的string

  4. null:就是JavaScript的null;

  5. array:就是JavaScript的Array表示方式——[];

  6. object:就是JavaScript的{ ... }表示方式。

以及上面的任意組合。

并且,JSON還定死了字符集必須是UTF-8,表示多語言就沒有問題了。為了統(tǒng)一解析,JSON的字符串規(guī)定必須用雙引號"",Object的鍵也必須用雙引號""。

由于JSON非常簡單,很快就風(fēng)靡Web世界,并且成為ECMA標(biāo)準(zhǔn)。幾乎所有編程語言都有解析JSON的庫,而在JavaScript中,我們可以直接使用JSON,因為JavaScript內(nèi)置了JSON的解析。

把任何JavaScript對象變成JSON,就是把這個對象序列化成一個JSON格式的字符串,這樣才能夠通過網(wǎng)絡(luò)傳遞給其他計算機(jī)。

如果我們收到一個JSON格式的字符串,只需要把它反序列化成一個JavaScript對象,就可以在JavaScript中直接使用這個對象了。

序列化

讓我們先把小明這個對象序列化成JSON格式的字符串:

var xiaoming = {
  name: '小明',
  age: 14,
  gender: true,
  height: 1.65,
  grade: null,
  'middle-school': '\"W3C\" Middle School',
  skills: ['JavaScript', 'Java', 'Python', 'Lisp']
};

JSON.stringify(xiaoming); // '{"name":"小明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript","Java","Python","Lisp"]}'

要輸出得好看一些,可以加上參數(shù),按縮進(jìn)輸出:

JSON.stringify(xiaoming, null, ' ');

結(jié)果:

{
 "name": "小明",
 "age": 14,
 "gender": true,
 "height": 1.65,
 "grade": null,
 "middle-school": "\"W3C\" Middle School",
 "skills": [
  "JavaScript",
  "Java",
  "Python",
  "Lisp"
 ]
}

第二個參數(shù)用于控制如何篩選對象的鍵值,如果我們只想輸出指定的屬性,可以傳入Array:

JSON.stringify(xiaoming, ['name', 'skills'], ' ');

結(jié)果:

{
 "name": "小明",
 "skills": [
  "JavaScript",
  "Java",
  "Python",
  "Lisp"
 ]
}

還可以傳入一個函數(shù),這樣對象的每個鍵值對都會被函數(shù)先處理:

function convert(key, value) {
  if (typeof value === 'string') {
    return value.toUpperCase();
  }
  return value;
}

JSON.stringify(xiaoming, convert, ' ');

上面的代碼把所有屬性值都變成大寫:

{
 "name": "小明",
 "age": 14,
 "gender": true,
 "height": 1.65,
 "grade": null,
 "middle-school": "\"W3C\" MIDDLE SCHOOL",
 "skills": [
  "JAVASCRIPT",
  "JAVA",
  "PYTHON",
  "LISP"
 ]
}

如果我們還想要精確控制如何序列化小明,可以給xiaoming定義一個toJSON()的方法,直接返回JSON應(yīng)該序列化的數(shù)據(jù):

var xiaoming = {
  name: '小明',
  age: 14,
  gender: true,
  height: 1.65,
  grade: null,
  'middle-school': '\"W3C\" Middle School',
  skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
  toJSON: function () {
    return { // 只輸出name和age,并且改變了key:
      'Name': this.name,
      'Age': this.age
    };
  }
};

JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'

反序列化

拿到一個JSON格式的字符串,我們直接用JSON.parse()把它變成一個JavaScript對象:

JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45

JSON.parse()還可以接收一個函數(shù),用來轉(zhuǎn)換解析出的屬性:

JSON.parse('{"name":"小明","age":14}', function (key, value) {
  // 把number * 2:
  if (key === 'name') {
    return value + '同學(xué)';
  }
  return value;
}); // Object {name: '小明同學(xué)', age: 14}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“JavaScript之json的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

本文標(biāo)題:JavaScript之json的示例分析
網(wǎng)頁路徑:http://muchs.cn/article12/pidjdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、Google、網(wǎng)頁設(shè)計公司、外貿(mào)建站、軟件開發(fā)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名