javascript學(xué)習(xí)之json入門
1. 什么是JSON
JSON---Javascript Object Notation,前兩個(gè)單詞大家應(yīng)該都認(rèn)識(shí),最后一個(gè)notation,是“記號(hào)、標(biāo)記法”的意思,連在一起,便成了JSON。
它是一種輕量級(jí)的數(shù)據(jù)交換格式,是基于Javascript的一個(gè)子集,可以叫做Javascript對(duì)象表示法,是存儲(chǔ)和交換文本信息的語法,但它并不是Javascript獨(dú)有的數(shù)據(jù)格式,其它很多語言都可以對(duì)JSON進(jìn)行解析和序列化。
2. JSON的由來
在21世紀(jì)初,Douglas Crockford(Web開發(fā)領(lǐng)域最知名的技術(shù)權(quán)威之一,ECMA JavaScript2.0標(biāo)準(zhǔn)化委員會(huì)委員,被JavaScript之父Brendan Eich稱為JavaScript的大宗師(Yoda),曾任Yahoo!資深JavaScript架構(gòu)師,現(xiàn)任PayPal高級(jí)JavaScript架構(gòu)師)試圖尋找一種更加簡(jiǎn)便的數(shù)據(jù)交換格式,能夠在服務(wù)器之間交換數(shù)據(jù),當(dāng)時(shí)通用的數(shù)據(jù)交換語言是XML,但是Douglas Crockford認(rèn)為XML的生成與解析都過于麻煩,所以他提出了一種更加簡(jiǎn)化的格式,就是我們現(xiàn)在使用的JSON。
JSON的規(guī)格十分簡(jiǎn)單,只用一個(gè)頁面幾百個(gè)字就能說清楚,而且Douglas Crackford稱這個(gè)規(guī)格永遠(yuǎn)不用升級(jí),因?yàn)樵撘?guī)定的都已經(jīng)規(guī)定好了。
3. 為什么要用JSON
JSON類似于XML,比XML更小、更快、更容易解析。但同時(shí)XML也有它的不可替代性,應(yīng)根據(jù)使用場(chǎng)景進(jìn)行更合適的選擇;
JSON語法簡(jiǎn)單,很容易理解,并且對(duì)象信息自描述,數(shù)據(jù)傳輸量小不占用帶寬;
JSON雖然遠(yuǎn)不及emoji這一世界通用語言,但其實(shí)它的支持度也已經(jīng)非??捎^,支持的語言包括C,C#,Java,JavaScript,PHP,Python,Ruby等等;
對(duì)于Ajax應(yīng)用程序來說,JSON比XML更快捷,更易用;
JSON的可讀性、可擴(kuò)展性都非常好,編碼難度也比較低,即使不借助工具也能寫出比較規(guī)范的JSON
......
4. JSON怎么用
⑴ JSON的基本語法
① 并列的數(shù)據(jù)之間用逗號(hào)( , )分隔
② 映射用冒號(hào)( : )表示
③ 映射的集合用大括號(hào)( {} )表示
④ 并列數(shù)據(jù)的集合用方括號(hào)( [] )表示
例如:
上賽季的MVP是斯蒂芬?guī)炖?,?chǎng)上位置是控球后衛(wèi),球衣號(hào)碼是30號(hào),球隊(duì)是金州勇士隊(duì)
上賽季的FMVP是勒布朗詹姆斯,場(chǎng)上位置是小前鋒,球衣號(hào)碼是23號(hào),球隊(duì)是克里夫蘭騎士隊(duì)
用JSON格式就可以表示為:
[{ "MVP":"Stephen Curry", "position":"Point Guard", "number":"30", "team":"Golden State Warriors" },{ "FMVP":"Lebron James", "position":"Small Forward", "number":"23", "team":"Cleveland Cavaliers" }]
更復(fù)雜的數(shù)據(jù)也可以使用JSON來進(jìn)行表示,比如下面這段信息:最喜歡的編輯器是sublime,最喜歡的運(yùn)動(dòng)是籃球,最喜歡的球隊(duì)是馬刺隊(duì),馬刺隊(duì)控衛(wèi)有托尼帕克、帕蒂米爾斯,分衛(wèi)有馬努吉諾比利、丹尼格林,小前鋒有科懷倫納德、凱爾安德森,大前鋒有拉馬庫斯阿爾德里奇、大衛(wèi)李,中鋒有德維恩戴德蒙、保羅加索爾?! ?/p>
{ "favoriteEditor": "sublime", "favoriteSport": "basketball", "favoriteTeam":{ "Spurs":[ { "PG":"Tony Parker", "SG":"Danny Green", "SF":"Kawhi Leonard", "PF":"LaMarcus Aldridge", "C":"Pau Gasol" }, { "PG":"Patty Mills", "SG":"Manu Ginobili", "SF":"Kyle Anderson", "PF":"David Lee", "C":"Dewayne Dedmon" } ] } }
⑵ JSON的解析與序列化
① 通過eval()函數(shù)將JSON字符串解析為JavaScript原生值
var str = '[{"name":"james","height":"203","number":"23"}, {"name":"kobe","height":"198","number":"24"}]'; //定義JSON字符串 var oJson = eval(str); //通過eval()函數(shù)解析拿到JavaScript原生值 //接下來便可通過JS進(jìn)行操作 alert(oJson[0].name); //james alert(oJson[1].height); //198
② 通過全局對(duì)象JSON的兩個(gè)方法parse()和stringify()進(jìn)行操作
parse()可以將JSON字符串轉(zhuǎn)化為JavaScript原生值:
var str = '[{"name":"james","height":"203","number":"23"},{"name":"kobe","height":"198","number":"24"}]'; //定義JSON字符串 var oJson = JSON.parse(str); //通過JSON對(duì)象的parse方法得到該JSON字符串的JavaScript原生值 document.write("姓名:" + oJson[1].name + "<br/>" + "身高:" + oJson[1].height + "cm" + "<br/>" + "球衣號(hào)碼:" + oJson[1].number);
parse()也可以傳第二個(gè)參數(shù),此時(shí)可以在還原出JavaScript值的時(shí)候?qū)⒃堤鎿Q成自己想要的值,如下:
var str = '[{"name":"james","height":"203","number":"23"},{"name":"kobe","height":"198","number":"24"}]'; var oJson = JSON.parse(str, function(key, value){ if('name' == key){ return '球員' + value; }else if('number' == key){ return value + '號(hào)球衣'; }else{ return value; } }); alert(oJson[0].name + '更牛逼還是' + oJson[1].name + '更牛逼' + '\n' + '你喜歡' + oJson[0].number + '還是' + oJson[1].number);
stringify()可以將原生JavaScript值轉(zhuǎn)換為JSON字符串:
var oJson = [{ name : "james", height : 203, number : 23 },{ name : "kobe", height : 198, number : 24 }]; var jsonStr = JSON.stringify(oJson,['name','number'],4); alert(jsonStr);
JSON.stringify(oJson,['name','number'],4);中的第一個(gè)參數(shù)表示需要轉(zhuǎn)化的JS對(duì)象;第二個(gè)參數(shù)用于過濾結(jié)果,表示只留下name和number,其他的key以及所對(duì)應(yīng)的的value都不要了;第三個(gè)參數(shù)表示在JSON字符串中保留的縮進(jìn)數(shù),有縮進(jìn)時(shí)可讀性更高,該參數(shù)也可以是一個(gè)字符串,比如'----',此時(shí)彈出結(jié)果如下:
如果不需要保留縮進(jìn),那么最后一個(gè)參數(shù)空起來即可,但如果不需要進(jìn)行過濾,第二個(gè)參數(shù)需設(shè)置為null占位,不能空起來,否則最后一個(gè)參數(shù)也會(huì)失效。
第二個(gè)參數(shù)也可以是函數(shù),函數(shù)可以進(jìn)行更加復(fù)雜的過濾:
var oJson = [{ name : "james", height : 203, position : '小前鋒' },{ name : "kobe", height : 198, position : '得分后衛(wèi)' }]; var jsonStr = JSON.stringify(oJson,function(key,value){ switch(key){ case 'name': return '球員 ' + value; case 'height': return '身高 ' + value + 'cm'; case 'position': return '位置 ' + value; default: return value; } },4); alert(jsonStr);
支持JSON對(duì)象的瀏覽器有IE8+、Chrome、FireFox3.5+、Opera10.5+、Safari4+,不支持的瀏覽器可以通過json.js這一開源庫來進(jìn)行模擬。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- JSON 入門教程基礎(chǔ)篇 json入門學(xué)習(xí)筆記
- Ajax與JSON的一些學(xué)習(xí)總結(jié)
- JSON學(xué)習(xí)筆記
- JSON 教程 json入門學(xué)習(xí)筆記
- Python解析json文件相關(guān)知識(shí)學(xué)習(xí)
- JSON stringify方法原理及實(shí)例解析
- Java使用JSON傳遞字符串注意事項(xiàng)解析
- 10分鐘掌握XML、JSON及其解析
- Java解析JSON數(shù)據(jù)時(shí)報(bào)錯(cuò)問題解決方案
- javascript解析json格式的數(shù)據(jù)方法詳解
- 10分鐘學(xué)會(huì)js處理json的常用方法
相關(guān)文章
IE 上下滾動(dòng)展示模仿Marquee機(jī)制
最近要做一個(gè)大屏幕展示上下滾動(dòng)的列表,而IE自帶的Marquee,無法滿足需要,隨自己寫了一個(gè)滾動(dòng)機(jī)制,代碼在附件中2009-12-12JavaScript基礎(chǔ)篇(3)之Object、Function等引用類型
這篇文章主要介紹了JavaScript基礎(chǔ)篇(3)之Object、Function等引用類型的相關(guān)資料,需要的朋友可以參考下2015-11-11JS實(shí)現(xiàn)仿QQ聊天窗口抖動(dòng)特效
本文給大家分享的是類似QQ窗口的抖動(dòng)效果,只是覺得好玩,沒什么技術(shù)含量,推薦給大家,有需要的小伙伴可以參考下。2015-05-05如何進(jìn)行微信公眾號(hào)開發(fā)的本地調(diào)試的方法
這篇文章主要介紹了如何進(jìn)行微信公眾號(hào)開發(fā)的本地調(diào)試的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06JavaScript實(shí)現(xiàn)消消樂的源代碼
這篇文章主要介紹了JavaScript實(shí)現(xiàn)消消樂-源代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01微信小程序點(diǎn)擊按鈕動(dòng)態(tài)切換input的disabled禁用/啟用狀態(tài)功能
這篇文章主要介紹了微信小程序點(diǎn)擊按鈕動(dòng)態(tài)切換input的disabled禁用/啟用狀態(tài)功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03JavaScript中instanceof與typeof運(yùn)算符的用法及區(qū)別詳細(xì)解析
這篇文章主要是對(duì)JavaScript中instanceof與typeof運(yùn)算符的用法及區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11JavaScript實(shí)現(xiàn)圖片無縫滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)圖片無縫滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07