javascript
JSON的使用・小结
JSON--JavaScript Object Notation (JavaScript對(duì)象表示法)
初始JSON的人很容易弄混對(duì)象與JSON(我也是剛剛弄清楚 ⊙﹏⊙)。
JSON是一種數(shù)據(jù)格式,經(jīng)常有人說(shuō)什么"把數(shù)據(jù)變成JSON對(duì)象然后@#¥……@¥"。
對(duì)象不一定是JSON格式,而JSON格式的數(shù)據(jù)(以下簡(jiǎn)稱(chēng)JSON數(shù)據(jù))則一定是對(duì)象(簡(jiǎn)單的數(shù)據(jù),如1,"ABCD"都算是JSON格式,這里暫且忽略之)
JSON格式是以key-value的形式存放數(shù)據(jù)的 如:
這當(dāng)中value可以是數(shù)字,字符串,數(shù)組,甚至null,但不能為undefined,function,對(duì)象實(shí)例和變量,否則該屬性會(huì)被無(wú)視掉。例:
var p = {"name":"Rose","family":undefined,"age":25,"sex":function(){} } JSON.stringify(p);//-->'{"name":"Rose","age":25}' //這里的JSON.stringify是EcmaScript5提供的,JSON是一個(gè)處理JSON數(shù)據(jù)的對(duì)象(IE8+ & 其他主流瀏覽器)。JSON對(duì)象有兩個(gè)方法parse()和stringify();
①JSON.parse(str)是將字符串str轉(zhuǎn)換成JSON數(shù)據(jù).如
JSON.parse('{"name":"Ray","age":18}')-->{"name":"Ray","age":18}②JSON.stringify(json,arg2)將JSON數(shù)據(jù)序列化。
第一個(gè)參數(shù)json是JSON數(shù)據(jù);
第二個(gè)參數(shù)是可選的,字符串?dāng)?shù)組或者函數(shù)。如果是數(shù)組的話則是只保留key值在數(shù)組中存在的屬性;函數(shù)的話,則可以對(duì)靈活的對(duì)value進(jìn)行修改。例:
③小拓展
通過(guò)JSON對(duì)象實(shí)現(xiàn)對(duì)象的深復(fù)制(因?yàn)槭褂昧薐SON對(duì)象的stringify方法,所以是有局限性的,對(duì)象中不能包含函數(shù)和對(duì)象實(shí)例)
var a = {A:4}; var b = JSON.parse(JSON.stringify(a));?
字符串向JSON格式轉(zhuǎn)換的過(guò)程中,字符串里不能包含某些具有特殊含義的字符,否則會(huì)轉(zhuǎn)換失敗.例
var str = '{"name":"NothingGo\sRight"}'; JSON.parse(str);//這里會(huì)報(bào)錯(cuò)。如果是用jQuery的Ajax獲取JSON的話,情況相同。blacklist整理入下:
\0,\b,\n,\f,\r,
\t,\v,\u,\v,\x
?
通過(guò)使用eval轉(zhuǎn)換JSON格式數(shù)據(jù)的問(wèn)題
因?yàn)镴SON對(duì)象在低版本瀏覽器的普及度低,我們?cè)趯⑿蛄谢臄?shù)據(jù)向JSON格式轉(zhuǎn)換時(shí)沒(méi)有用JSON對(duì)象,而是用eval和Function(這里就不講它了)。
eval的使用方法
var str = '{"Name":"Ray"}'; var json = eval("(" + str + ")");這里的問(wèn)題所在就是,初學(xué)者很容易就寫(xiě)成如下格式
var json = eval(str);結(jié)果就報(bào)出了令人疑惑的錯(cuò)誤:SyntaxError: Unexpected token :
疑惑是因?yàn)樽罂从铱磗tr都是正確的格式啊,而冒號(hào)也沒(méi)有問(wèn)題。
其實(shí)真正的原因是使用者沒(méi)有了解eval的執(zhí)行機(jī)制。
簡(jiǎn)單的說(shuō)eval就相當(dāng)于直接把eval中的字符串當(dāng)成javascript語(yǔ)句執(zhí)行,再把返回值賦給前面的變量。
在js中括號(hào)括起來(lái)的部分會(huì)被強(qiáng)行變成表達(dá)式。即
var json = {"Name":"Ray"}
而大括號(hào)(最外層的)則被理解成包裹代碼塊的符號(hào)。也就是說(shuō)只會(huì)執(zhí)行大括號(hào)里面的內(nèi)容。
這就成了 var json = "Name":"Ray";毫無(wú)疑問(wèn)那個(gè)冒號(hào)會(huì)引起法錯(cuò)誤。
?
轉(zhuǎn)載于:https://www.cnblogs.com/TiestoRay/archive/2012/11/15/2762536.html
總結(jié)
以上是生活随笔為你收集整理的JSON的使用・小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Binary Search O(log
- 下一篇: 面向接口编程详解(一)—— 思想基础