JSON是一種按照 JavaScript對(duì)象語(yǔ)法的數(shù)據(jù)格式寓娩。
1.概念
概念有三點(diǎn):
JSON全稱 JavaScript 對(duì)象表示法(JavaScript Object Notation)脐彩。
JSON 是存儲(chǔ)和交換文本信息的語(yǔ)法咖为。類似 XML隅要。
JSON 比 XML 更小舌剂、更快攻晒,更易解析铸抑。
JSON 使用 JavaScript 語(yǔ)法來(lái)描述數(shù)據(jù)對(duì)象遏暴,但是 JSON 仍然獨(dú)立于語(yǔ)言和平臺(tái)侄刽。 JSON 解析器和 JSON 庫(kù)支持許多不同的編程語(yǔ)言。
2.語(yǔ)法
JSON在使用過(guò)程中可作為一個(gè)對(duì)象或者字符串存在拓挥,當(dāng)作為對(duì)象時(shí)唠梨,用于獲取 JSON中的數(shù)據(jù),而作為字符串時(shí)常用于網(wǎng)絡(luò)數(shù)據(jù)傳輸侥啤。
JSON語(yǔ)法規(guī)則:
1.數(shù)據(jù)在名稱/值對(duì)中
2.數(shù)據(jù)由逗號(hào)分隔
3.花括號(hào)保存對(duì)象
4.方括號(hào)保存數(shù)組
通常当叭, JSON數(shù)據(jù)書寫格式是 名稱/鍵值:
"name" : "pingan";
而 JSON的值可以是 :
1.數(shù)字(整數(shù)或浮點(diǎn)數(shù))
2.字符串(在雙引號(hào)中)
3.邏輯值( true 或 false)
4.數(shù)組(在方括號(hào)中)
5.對(duì)象(在花括號(hào)中)
6.null
2.1 簡(jiǎn)單值
簡(jiǎn)單值可以是字符串:
"hello leo!";
也可以是數(shù)字,邏輯值:
1
2.2 對(duì)象類型
內(nèi)容放在 花括號(hào)內(nèi),是多個(gè)鍵值對(duì)盖灸。
JSON對(duì)象 與 js 對(duì)象的三個(gè)區(qū)別:
1.JSON對(duì)象 必須加雙引號(hào)蚁鳖,而 js 對(duì)象屬性名可以不加雙引號(hào)。
2.JSON對(duì)象 沒有變量聲明赁炎,而 js 對(duì)象有醉箕。
3.JSON對(duì)象 沒有分號(hào),而 js 對(duì)象有徙垫。
// js 對(duì)象
var obj = {
name : "pingan",
age : "25",
};
// json 對(duì)象
{
"name" : "pingan",
"age" : "25",
"box" : [
"a","b","c"
]
}
2.3 數(shù)組類型
內(nèi)容放在 方括號(hào)內(nèi)讥裤。
JSON數(shù)組也沒有分號(hào)和變量,常骋霰ǎ可以把JSON數(shù)組和對(duì)象結(jié)合使用己英,構(gòu)成更復(fù)雜的數(shù)據(jù)集合。
[
{
"name" :"leo",
"age":25,
"box":["a","b","c"]
},
{
"name":"pingan",
"age": 25,
"box":["a","b","c"]
}
]
3. 使用
JSON最常見的用法就是吴旋,從服務(wù)端獲取JSON數(shù)據(jù)损肛,再將JSON數(shù)據(jù)轉(zhuǎn)成JavaScrip對(duì)象使用。
JSON對(duì)象有兩個(gè)方法:
1.JSON.stringify(): 序列化操作荣瑟,將 JavaScript對(duì)象轉(zhuǎn)換成 JSON字符串治拿。
2.JSON.prase():反序列化操作,將 JSON字符串解析成 JavaScript值笆焰。
3.1 序列化操作
序列化操作常常使用 JSON.stringify()劫谅。
簡(jiǎn)單例子:
let leo = {
name : "leo",
age : 25,
box : ["a","b","c"]
}
let pingan=JSON.stringify(leo);
console.log(pingan);
// "{"name":"leo","age":25,"box":["a","b","c"]}"
注意:
1.默認(rèn)情況下, JSON.stringify()輸出的JSON字符串不包含任何空格字符或縮進(jìn),因此結(jié)果就像上面那樣同波。
2.序列化 JavaScript對(duì)象時(shí)鳄梅,所有函數(shù)及原型成員都會(huì)被忽略,不體現(xiàn)在結(jié)果上未檩。
3.值為 undefined的任何屬性都會(huì)被跳過(guò)戴尸。
因此,最終的值都是有效的JSON數(shù)據(jù)類型的實(shí)例屬性冤狡。
3.2 反序列化操作
序列化操作常常使用 JSON.parse()孙蒙。
簡(jiǎn)單例子:
let copyPingan = JSON.parse(pingan);
copyPingan; // {name: "leo", age: 25, box: Array(3)}
如果傳入 JSON.parse()的字符串不是有效的JSON,則會(huì)拋出錯(cuò)誤悲雳。
注意:
雖然 pingan和 copyPingan屬性相同挎峦,但兩者獨(dú)立,沒有任何關(guān)系合瓢。