JSON格式是種用于數據交換的文本格式,目的是取代麻煩笨重的XML格式。
我這里有些數據,然后發送給服務器或者其他終端,然后對方就需要解析吧,關鍵是怎么解析呢?解析亂了呢?所以提前約定好一種數據寫法,一種格式,然后解析就方便了。
以前是XML格式:
<people>
<name>haha</name>
<age>5<age>
</people>
比較像html的格式了,但是好麻煩哦。
JSON格式:
{
"name" : "haha",
"age": "5"
}
看著好像對象的格式哦,是吧。因為用著太舒服了,簡單,所以推廣了。但是,嚴格意義上,JSON格式不僅僅用在瀏覽器中的,它是一種數據格式,就是用在數據交互中的,所以用途比較廣,比如脫離JS,用在服務器中,解析JSON格式數據,然后得到一個對象。
嚴格規定:
- 復合類型值只能是數組或對象,不能是函數、正則表達式對象、日期對象。
- 簡單類型值:數值(必須十進制內表示),字符串,布爾值和null,其他不行的。
- 字符串必須雙引號。
- 對象鍵名key必須用雙引號。
- 數組、對象最后一個成員后面,不能加逗號。
說這個的意思就是JS中的對象的寫法是比較寬松自由的,加以區別哦。
合格的寫法:
["one","two","three"]
{"one":1,"two":2,"three":3}
{"names":["張三","李四"]}
[{"name":"張三"},{"name":"李四"}]
錯誤的寫法:
{name:"張",'age':32} //屬性必須雙引號
[32,64,234,0xFFF] //不能十六進制
{"name":"張","age":undefined} // 不能undefined
{"name":"張",
"birthday":new Date('Fir ,26 Aug 2011 07:13:17'),
"getName": function() {
return this.name
}} //不能日期和函數
空數組和空對象也是符合的,null也是符合的。
JSON.stringify()
這里要講在JS 中處理JSON 格式的數據。
JSON.stringify用于將一個值轉化為字符串。字符串符合JSON格式,并可以被JSON.parse方法還原。
var str = '{name : "haha", age: 3}' // 字符串,符合JSON格式
JSON.parse(str) //執行,得到了{age:3,name:"haha"}
JSON.parse(str).age // 3
JSON.parse(str).name //"haha"
字符串轉JS數據。
現在要JS數據轉成字符串:
var obj ={a:1,b:2}
JSON.stringify(obj) //"{"a":1,"b":2}"
簡單數據的深拷貝
上次是用函數遞歸,先把參數進行遍歷,在函數里重新生成空對象,遍歷過程中再去賦值,return回來。
var obj = {
name : 'hunger',
age : 3,
friends : ['aa','bb','cc']
}
var obj2 = JSON.parse(JSON.stringify(obj)) //先變成字符串,再把字符串解析變成JS的對象
obj.age = 4
console.log(obj2.age) // 3
JS對象字面量寫法長得像JSON格式數據,兩者不同范疇。JS更寬泛,JSON更嚴謹。JS的函數,日期等格式不支持JSON規范。