JSON是什么
JSON ( JavaScript Object Notation) ,是一種數據交互格式。
為什么有這個技術
Json之前,大家都用 XML 傳遞數據。XML 是一種純文本格式,所以適合在網絡上交換數據,但是 XML 格式比較復雜,終于道格拉斯·克羅克福特(Douglas Crockford)發明了JSON 這種超輕量級的數據交換格式。
相比 XML 的不同之處
- 沒有結束標簽
- 更短
- 讀寫的速度更快
- 能夠使用內建的 JavaScript eval() 方法進行解析
- 使用數組
- 不使用保留字
JSON 如何使用
- 數據格式
JSON 實際上是 JavaScript 的一個子集,所以JSON 的數據格式和 JavaScript 是對應的:
- number => JS number
- boolean => JS boolean
- string => JS string //
- null => JS null
- array => JS Array 的表達方式 []
- object => JS {} 表達式
- 注意事項
- JSON 規定字符集是UTF-8,字符串必須使用"",Object 的鍵也必須使用""
- 數組或對象的最后一個成員,不能加逗號
- JSON 語法規則
JSON 語法是 JavaScript 對象表示法語法的子集。
- 數據在名稱/值對中
- 數據由逗號分隔
- 花括號保存對象
- 方括號保存數組
- JSON 名稱/值對
JSON 數據的書寫格式是:名稱/值對。
名稱/值對包括字段名稱(在雙引號中),后面寫一個冒號,然后是值:
"firstName" : "John"
這很容易理解,等價于這條 JavaScript 語句:
firstName = "John"
- JSON 值
JSON 值可以是:
- 數字(整數或浮點數)
- 字符串(在雙引號中)
- 邏輯值(true 或 false)
- 數組(在方括號中)
- 對象(在花括號中)
- null
- JSON 對象
JSON 對象在花括號中書寫:
對象可以包含多個名稱/值對:
{ "firstName":"John" , "lastName":"Doe" }
這一點也容易理解,與這條 JavaScript 語句等價:
firstName = "John"
lastName = "Doe"
- JSON 數組
JSON 數組在方括號中書寫:
數組可包含多個對象:
{
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
在上面的例子中,對象 "employees" 是包含三個對象的數組。每個對象代表一條關于某人(有姓和名)的記錄。
- JS 內置兩個Json方法
JSON.stringify( {} , [ ] , "")
//參數一 :要序列化的數據(object)
//參數二 :控制對象的鍵值,只想輸出指定的屬性,傳入一個數組
//參數三 :序列化后,打印輸出的格式(一個Tab ,可以更直觀查看json)
任何把 JavaScript 變成 Json ,就是把這個對象序列化為Json字符串,然后才可以通過網絡傳遞;
收到一個Json格式的字符串,
JSON.parse( json.DATA ) //傳入json字符串
如果我們收到一個JSON格式的字符串,只需要把它反序列化成一個JavaScript對象,就可以在JavaScript中直接使用這個對象了。
實例:
1.數組方式 [ ]
[{
"id" : 1 ,
"name" : "xiaoming"
},{
"id" : 2 ,
"name" : "xiaohong"
}]
2.對象方式 { }
//前后端分離,推薦后端返回給前端數據格式
{
"status" : 0 , //執行狀態碼
"msg" : "SUCCESS", //說明文字信息,沒有為NULL
"data" :[{ //對象中嵌套數組,數組是返回的數據,
"id" : 1 ,
"name" : "xiaohong"
},{
"id" : 2,
"name" : "xiaoming"
}]
}
3.反例
{"id" : ox16 } //不合法,數值需要是十進制
{"name" : underfined } //不合法,沒有該值
[{
"name" : NUll,
"school" : function() {
console.log("該寫法是錯誤的")
}//不合法
}]//json中不能使用自定義函數,或系統內置函數