JSON是什么,如何處理轉(zhuǎn)義宏怔?

大家好奏路,我是IT修真院深圳分院第01期學(xué)員畴椰,一枚正直善良的web程序員。

今天給大家分享一下鸽粉,修真院官網(wǎng) JS任務(wù)中可能會使用到的知識點(diǎn):

JSON是什么斜脂,如何處理轉(zhuǎn)義?


1.背景介紹

什么是JSON

JSON (JavaScript Object Notation, JS 對象標(biāo)記) 是一種輕量級的數(shù)據(jù)交換格式触机。它基于 ECMAScript (w3c制定的js規(guī)范)的一個子集帚戳,采用完全獨(dú)立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言儡首。 易于人閱讀和編寫片任,同時也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率蔬胯《怨——百度百科

數(shù)據(jù)傳輸是我們在敲代碼時,經(jīng)常遇到的一個場景,前后端交互氛濒。給數(shù)據(jù)一個統(tǒng)一的格式有利于我們編寫和解析數(shù)據(jù)犁钟。

json,是一種數(shù)據(jù)格式泼橘,在與后端的數(shù)據(jù)交互中有較為廣泛的應(yīng)用涝动。

JSON的誕生

JSON是 (JavaScript Object Notation, JS 對象標(biāo)記),它是一種數(shù)據(jù)交換格式炬灭。在JSON出現(xiàn)之前醋粟,大家一直用XML來傳遞數(shù)據(jù)。因?yàn)閄ML是一種純文本格式重归,所以它適合在網(wǎng)絡(luò)上交換數(shù)據(jù)米愿。XML本身不算復(fù)雜,但是鼻吮,加上DTD育苟、XSD、XPath椎木、XSLT等一大堆復(fù)雜的規(guī)范以后违柏,任何正常的軟件開發(fā)人員碰到XML都會感覺頭大了,最后大家發(fā)現(xiàn)香椎,即使你努力鉆研幾個月漱竖,也未必搞得清楚XML的規(guī)范。

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

由于JSON非常簡單万矾,很快就風(fēng)靡Web世界悼吱,并且成為ECMA標(biāo)準(zhǔn)。幾乎所有編程語言都有解析JSON的庫良狈,而在JavaScript中后添,我們可以直接使用JSON,因?yàn)镴avaScript內(nèi)置了JSON的解析们颜。把任何JavaScript對象變成JSON,就是把這個對象序列化成一個JSON格式的字符串猎醇,這樣才能夠通過網(wǎng)絡(luò)傳遞給其他計(jì)算機(jī)窥突。如果我們收到一個JSON格式的字符串,只需要把它反序列化成一個JavaScript對象硫嘶,就可以在JavaScript中直接使用這個對象了阻问。

轉(zhuǎn)義

我們在調(diào)用 jsonp 接口或者調(diào)用js文件的時候,由于文件編碼不同會導(dǎo)致出現(xiàn)亂碼的問題沦疾。 如果你的文件出現(xiàn)了非英文字符称近,如果調(diào)用時文件編碼不一致,同樣會出現(xiàn)亂碼情況哮塞。

這也就是為什么要數(shù)據(jù)統(tǒng)一格式的原因刨秆。

JSON 是適用于 Ajax 應(yīng)用程序的一種有效格式,原因是它使 JavaScript 對象和字符串值之間得以快速轉(zhuǎn)換 JSON是一種傳遞對象的語法

JSON是一個提供了stringify和parse方法的內(nèi)置對象

stringify將js對象轉(zhuǎn)化為符合json標(biāo)準(zhǔn)的字符串

parse將符合json標(biāo)準(zhǔn)的字符串轉(zhuǎn)化為js對象


2.知識剖析

JSON語法

數(shù)據(jù)在名稱/值對中

數(shù)據(jù)由逗號分隔

大括號保存對象

中括號保存數(shù)組

JSON值

數(shù)字(整數(shù)/浮點(diǎn)數(shù))

字符串(雙引號)

布爾值(true/false)

數(shù)組(中括號中)

對象(大括號中)

null

實(shí)例

JSON 數(shù)據(jù)的書寫格式是:名稱/值對忆畅。

名稱/值對組合中的名稱寫在前面(在雙引號中)衡未,值對寫在后面,中間用冒號隔開家凯,

其中 值 可以是:數(shù)字(整數(shù)或浮點(diǎn)數(shù))缓醋、字符串(在雙引號中)、布爾值(true或false)绊诲、數(shù)組(在方括號中)送粱、對象(在花括號中)、null

varjson= {"password":123456,"name":"myname","Booleans":true,"Array":[x,y,z],"object":{}}

或者是嵌套使用


轉(zhuǎn)義概述

為什么需要轉(zhuǎn)義掂之?在js中我們使用的js對象進(jìn)行處理抗俄,但是在與后端數(shù)據(jù)交換的時候,我們發(fā)送規(guī)定的json格式的字符串世舰,所以在給后端發(fā)送或接受數(shù)據(jù)的時候橄镜,需要轉(zhuǎn)義

{name:"myname",password:123456}

"{"name":"myname","password":123456}"

其中json字符串轉(zhuǎn)js對象,調(diào)用parse方法:

js對象 = JSON.parse(json字符串);

js對象轉(zhuǎn)json字符串冯乘,調(diào)用stringify方法:

json字符串 = JSON.stringify(js對象);


3.常見問題

在json字符串轉(zhuǎn)換成對象洽胶,還有eval_r('('+json字符串+')')這個方法,但是在對目標(biāo)數(shù)據(jù)進(jìn)行讀取時,可能會出現(xiàn)一些意外的錯誤:



4.解決方案

原因:eval_r獲取的json對象的值中姊氓,如果有執(zhí)行代碼丐怯,也將照樣執(zhí)行!所以若不能保證數(shù)據(jù)的安全性翔横,不要使用eval_r方法進(jìn)行轉(zhuǎn)義读跷。



5.編碼實(shí)戰(zhàn)

下面是一個簡單的json數(shù)據(jù)發(fā)送應(yīng)用,有興趣可以閱讀一下:



6.擴(kuò)展思考

我們澈萄洌看到

{name:"myname",password:123456}

{"name":"myname","password":123456}

這樣兩種格式效览,即js對象和json,然而js對象和json有什么不一樣的地方荡短?

很多人搞不清楚 JSON 和 Js 對象的關(guān)系丐枉,甚至連誰是誰都不清楚。其實(shí)掘托,可以這么理解:

JSON 是 JS 對象的字符串表示法瘦锹,它使用文本表示一個 JS 對象的信息,本質(zhì)是一個字符串闪盔。

var obj = {a: 'Hello', b: 'World'}; //這是一個對象弯院,注意鍵名也是可以使用引號包裹的

var json = '{"a": "Hello", "b": "World"}'; //這是一個 JSON 字符串,本質(zhì)是一個字符串



7.參考文獻(xiàn)

參考一:JSON官方文網(wǎng)

參考二:Json對象和Json字符串的區(qū)別

參考三:json屬性名必須加引號的討論


8.更多討論

XML是什么泪掀?

JAVASCRIPT對象的KEY可不可以直接數(shù)字听绳,如果寫數(shù)字,那么它最終是什么數(shù)據(jù)類型


詳見視頻:


JSON是什么异赫,如何處理轉(zhuǎn)義辫红?_騰訊視頻

PPT戳這里


感謝大家觀看!

今天的分享就到這里啦祝辣,歡迎大家點(diǎn)贊贴妻、轉(zhuǎn)發(fā)、留言蝙斜、拍磚~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末名惩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子孕荠,更是在濱河造成了極大的恐慌娩鹉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稚伍,死亡現(xiàn)場離奇詭異弯予,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)个曙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門锈嫩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事呼寸⊙奁” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵对雪,是天一觀的道長河狐。 經(jīng)常有香客問我,道長瑟捣,這世上最難降的妖魔是什么馋艺? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮迈套,結(jié)果婚禮上捐祠,老公的妹妹穿的比我還像新娘。我一直安慰自己交汤,他們只是感情好雏赦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布劫笙。 她就那樣靜靜地躺著芙扎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪填大。 梳的紋絲不亂的頭發(fā)上戒洼,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音允华,去河邊找鬼圈浇。 笑死,一個胖子當(dāng)著我的面吹牛靴寂,可吹牛的內(nèi)容都是我干的磷蜀。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼百炬,長吁一口氣:“原來是場噩夢啊……” “哼褐隆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剖踊,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤庶弃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后德澈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇攻,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年梆造,在試婚紗的時候發(fā)現(xiàn)自己被綠了缴守。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖斧散,靈堂內(nèi)的尸體忽然破棺而出供常,到底是詐尸還是另有隱情,我是刑警寧澤鸡捐,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布栈暇,位于F島的核電站,受9級特大地震影響箍镜,放射性物質(zhì)發(fā)生泄漏源祈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一色迂、第九天 我趴在偏房一處隱蔽的房頂上張望香缺。 院中可真熱鬧,春花似錦歇僧、人聲如沸图张。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祸轮。三九已至,卻和暖如春侥钳,著一層夾襖步出監(jiān)牢的瞬間适袜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工舷夺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留苦酱,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓给猾,卻偏偏與公主長得像疫萤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子敢伸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容