【JS-05】JSON是什么面哥,如何處理轉(zhuǎn)義哎壳?

1.背景介紹

JSON一種數(shù)據(jù)交換格式尚卫。在JSON出現(xiàn)之前归榕, 大家一直用XML來(lái)傳遞數(shù)據(jù)。因?yàn)閄ML是一種純文本格式吱涉,所以它適合在網(wǎng)絡(luò)上交換數(shù)據(jù)刹泄。XML本身不算復(fù)雜,但是怎爵, 加上DTD特石、XSD、XPath鳖链、XSLT等一大堆復(fù)雜的規(guī)范以后姆蘸,即使你努力鉆研幾個(gè)月,也未必搞得清楚XML的規(guī)范芙委。

終于逞敷,在2002年的一天,道格拉斯·克羅克福特發(fā)明了JSON這種超輕量級(jí)的數(shù)據(jù)交換格式灌侣。

由于JSON非常簡(jiǎn)單推捐,很快就風(fēng)靡Web世界。而在JavaScript中侧啼,我們可 以直接使用JSON牛柒,因?yàn)镴avaScript內(nèi)置了JSON的解析堪簿。把任何JavaScript對(duì)象變成JSON,就是把這個(gè)對(duì)象序列化成一個(gè)JSON 格式的字符串皮壁,這樣才能夠通過(guò)網(wǎng)絡(luò)傳遞給其他計(jì)算機(jī)椭更。如果我們收到一個(gè)JSON格式的字符串,只需要把它反序列化成一個(gè)JavaS cript對(duì)象闪彼,就可以在JavaScript中直接使用這個(gè)對(duì)象了甜孤。

2.知識(shí)剖析

JSON語(yǔ)法

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

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

大括號(hào)保存對(duì)象

中括號(hào)保存數(shù)組


JSON值

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

字符串(雙引號(hào))

布爾值(true/false)

數(shù)組(中括號(hào)中)

對(duì)象(大括號(hào)中)

null

實(shí)例

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

名稱/值對(duì)組合中的名稱寫在前面(在雙引號(hào)中)畏腕,值對(duì)寫在后面,中間用冒號(hào)隔開(kāi)茉稠,

其中 值 可以是:數(shù)字(整數(shù)或浮點(diǎn)數(shù))描馅、字符串(在雙引號(hào)中)、邏輯值(true或false)而线、數(shù)組(在方括號(hào)中)铭污、對(duì)象(在花括號(hào)中)、null

使用方式:

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

或者是嵌套使用

? ? ? ? ? ? ? ? ? ? ? myObj = {

? ? ? ? ? ? ? ? ? ? ? ? ? "name":"runoob",

? ? ? ? ? ? ? ? ? ? ? ? ? "alexa":10000,

? ? ? ? ? ? ? ? ? ? ? ? ? "sites": {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "site1":"www.runoob.com",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "site2":"m.runoob.com",

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "site3":"c.runoob.com"

? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? console.log(myObj)

//輸出結(jié)果:

Object {name: "runoob", alexa: 10000, sites: Object}

轉(zhuǎn)義概述

為什么需要轉(zhuǎn)義膀篮?在js中我們使用的js對(duì)象進(jìn)行處理嘹狞,但是在與后端數(shù)據(jù)交換的時(shí)候,我們發(fā)送規(guī)定的json格式的字符串誓竿,所以在給后端發(fā)送或接受數(shù)據(jù)的時(shí)候磅网,需要

{name:"myname",password:123456} <–> "{"name":"myname","password":123456}"

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

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

js對(duì)象轉(zhuǎn)json字符串筷屡,調(diào)用stringify方法:

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

3.常見(jiàn)問(wèn)題

除了以上兩種方法還有什么可以轉(zhuǎn)化

4.解決方案

用eval_r('('+json字符串+')')這個(gè)方法可以實(shí)現(xiàn)json計(jì)算

var value = 1;

var js = '{"data1":"hello","data2":value++}';

console.log(js);

var data1 = eval("("+js+")");

console.log(data1);

var data2=JSON.stringify(js);

console.log(data2);

eval_r獲取的json對(duì)象的值中涧偷,如果有執(zhí)行代碼,也將照樣執(zhí)行毙死!所以若不能保證數(shù)據(jù)的安全性燎潮,不要使用eval_r方法進(jìn)行轉(zhuǎn)義。

6.擴(kuò)展思考

我們扯筇龋看到{name:"myname",password:123456}和{"name":"myname","password":123456}這樣兩種格式确封,即js對(duì)象和json,然而js對(duì)象和json有什么不一樣的地方再菊?

一個(gè)栗子大家可以自己在瀏覽器上運(yùn)行一下

<script>

var jso1={

a:"name","b":"age"

};

var jso2={

"a":"name","b":"age"

};

console.log(jso1.a === jso2.a);

console.log(jso1.b === jso2.b);

console.log(jso1 === jso2);

console.log(jso1);

console.log(jso2);

var jso3=JSON.stringify(jso1);

console.log(jso3);

var jso4=JSON.parse({

'a':"name","b":"age"

});

var jso4=JSON.parse('{\"a\":\"name\", \"b\":\"age\"}');

console.log(jso4);

</script>

7.參考文獻(xiàn)

參考一:百度百科

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

參考三:json屬性名必須加引號(hào)的討論

8.更多討論

如何寫一個(gè)json解析器爪喘?

提問(wèn):

? ? Q:JSON對(duì)象有什么遍歷方法,如何做

????A:用jq方法$.each遍歷json對(duì)象

? ? Q:angularjs如何轉(zhuǎn)換字符串和對(duì)象

? ? A:angular.fromJson(?);

????????angular.toJson();

Q:json和jisonp有什么區(qū)別

A:json返回的是一串?dāng)?shù)據(jù)袄简;而jsonp返回的是腳本代碼(包含一個(gè)函數(shù)調(diào)用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腥放,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子绿语,更是在濱河造成了極大的恐慌秃症,老刑警劉巖候址,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異种柑,居然都是意外死亡岗仑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門聚请,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)荠雕,“玉大人,你說(shuō)我怎么就攤上這事驶赏≌ū埃” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵煤傍,是天一觀的道長(zhǎng)盖文。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蚯姆,這世上最難降的妖魔是什么五续? 我笑而不...
    開(kāi)封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮龄恋,結(jié)果婚禮上疙驾,老公的妹妹穿的比我還像新娘。我一直安慰自己郭毕,他們只是感情好它碎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著铣卡,像睡著了一般链韭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煮落,一...
    開(kāi)封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天敞峭,我揣著相機(jī)與錄音,去河邊找鬼蝉仇。 笑死旋讹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的轿衔。 我是一名探鬼主播沉迹,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼害驹!你這毒婦竟也來(lái)了鞭呕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宛官,失蹤者是張志新(化名)和其女友劉穎葫松,沒(méi)想到半個(gè)月后瓦糕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腋么,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年咕娄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片珊擂。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡圣勒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摧扇,到底是詐尸還是另有隱情圣贸,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布扛稽,位于F島的核電站旁趟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庇绽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一橙困、第九天 我趴在偏房一處隱蔽的房頂上張望瞧掺。 院中可真熱鬧,春花似錦凡傅、人聲如沸辟狈。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)哼转。三九已至,卻和暖如春槽华,著一層夾襖步出監(jiān)牢的瞬間壹蔓,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工猫态, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佣蓉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓亲雪,卻偏偏與公主長(zhǎng)得像勇凭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子义辕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353