JSON格式是種用于數(shù)據(jù)交換的文本格式阻肩,目的是取代麻煩笨重的XML格式酒朵。
我這里有些數(shù)據(jù)桥氏,然后發(fā)送給服務(wù)器或者其他終端焕梅,然后對(duì)方就需要解析吧缀拭,關(guān)鍵是怎么解析呢谆吴?解析亂了呢煎谍?所以提前約定好一種數(shù)據(jù)寫(xiě)法些侍,一種格式隶症,然后解析就方便了。
以前是XML格式:
<people>
<name>haha</name>
<age>5<age>
</people>
比較像html的格式了岗宣,但是好麻煩哦蚂会。
JSON格式:
{
"name" : "haha",
"age": "5"
}
看著好像對(duì)象的格式哦,是吧耗式。因?yàn)橛弥娣诵沧。?jiǎn)單,所以推廣了刊咳。但是彪见,嚴(yán)格意義上,JSON格式不僅僅用在瀏覽器中的娱挨,它是一種數(shù)據(jù)格式余指,就是用在數(shù)據(jù)交互中的,所以用途比較廣跷坝,比如脫離JS酵镜,用在服務(wù)器中,解析JSON格式數(shù)據(jù)柴钻,然后得到一個(gè)對(duì)象淮韭。
嚴(yán)格規(guī)定:
- 復(fù)合類型值只能是數(shù)組或?qū)ο螅荒苁呛瘮?shù)贴届、正則表達(dá)式對(duì)象缸濒、日期對(duì)象。
- 簡(jiǎn)單類型值:數(shù)值(必須十進(jìn)制內(nèi)表示)粱腻,字符串庇配,布爾值和null,其他不行的绍些。
- 字符串必須雙引號(hào)捞慌。
- 對(duì)象鍵名key必須用雙引號(hào)。
- 數(shù)組柬批、對(duì)象最后一個(gè)成員后面啸澡,不能加逗號(hào)袖订。
說(shuō)這個(gè)的意思就是JS中的對(duì)象的寫(xiě)法是比較寬松自由的,加以區(qū)別哦嗅虏。
合格的寫(xiě)法:
["one","two","three"]
{"one":1,"two":2,"three":3}
{"names":["張三"洛姑,"李四"]}
[{"name":"張三"},{"name":"李四"}]
錯(cuò)誤的寫(xiě)法:
{name:"張",'age':32} //屬性必須雙引號(hào)
[32,64,234,0xFFF] //不能十六進(jìn)制
{"name":"張","age":undefined} // 不能undefined
{"name":"張",
"birthday":new Date('Fir ,26 Aug 2011 07:13:17'),
"getName": function() {
return this.name
}} //不能日期和函數(shù)
空數(shù)組和空對(duì)象也是符合的皮服,null也是符合的楞艾。
JSON.stringify()
這里要講在JS 中處理JSON 格式的數(shù)據(jù)。
JSON.stringify用于將一個(gè)值轉(zhuǎn)化為字符串龄广。字符串符合JSON格式硫眯,并可以被JSON.parse方法還原。
var str = '{name : "haha", age: 3}' // 字符串择同,符合JSON格式
JSON.parse(str) //執(zhí)行两入,得到了{(lán)age:3,name:"haha"}
JSON.parse(str).age // 3
JSON.parse(str).name //"haha"
字符串轉(zhuǎn)JS數(shù)據(jù)。
現(xiàn)在要JS數(shù)據(jù)轉(zhuǎn)成字符串:
var obj ={a:1,b:2}
JSON.stringify(obj) //"{"a":1,"b":2}"
簡(jiǎn)單數(shù)據(jù)的深拷貝
上次是用函數(shù)遞歸敲才,先把參數(shù)進(jìn)行遍歷裹纳,在函數(shù)里重新生成空對(duì)象,遍歷過(guò)程中再去賦值紧武,return回來(lái)剃氧。
var obj = {
name : 'hunger',
age : 3,
friends : ['aa','bb','cc']
}
var obj2 = JSON.parse(JSON.stringify(obj)) //先變成字符串,再把字符串解析變成JS的對(duì)象
obj.age = 4
console.log(obj2.age) // 3
JS對(duì)象字面量寫(xiě)法長(zhǎng)得像JSON格式數(shù)據(jù)脏里,兩者不同范疇她我。JS更寬泛,JSON更嚴(yán)謹(jǐn)迫横。JS的函數(shù)番舆,日期等格式不支持JSON規(guī)范。