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

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

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

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


1.背景介紹

什么是JSON

JSON (JavaScript Object Notation, JS 對象標(biāo)記) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript (w3c制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(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ù)。因為XML是一種純文本格式,所以它適合在網(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,因為JavaScript內(nèi)置了JSON的解析。把任何JavaScript對象變成JSON,就是把這個對象序列化成一個JSON格式的字符串,這樣才能夠通過網(wǎng)絡(luò)傳遞給其他計算機(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ù)/浮點數(shù))

字符串(雙引號)

布爾值(true/false)

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

對象(大括號中)

null

實例

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

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

其中 值 可以是:數(shù)字(整數(shù)或浮點數(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.編碼實戰(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)系,甚至連誰是誰都不清楚。其實,可以這么理解:

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戳這里


感謝大家觀看!

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容