轉載自 ?
https://itbilu.com/javascript/js/Vkmh3oeOg.html
JSON(JavaScript Object Notation,JavaScript對象標記)是一種輕量級的輕量級的數據交換語言,是ECMAScript的一個子集。JSON是獨立于語言的一種文本格式,這種格式非常易于人的閱讀和編寫,也易于機器的解析。由于沒有過多的描述標記,在網絡傳輸中有較高的傳輸效率,是一種理想的數據交互格式。
1. JSON特點
JSON是ECMAScript的子集,其與JavaScript中的對象結構類似,是一種鍵/值(key/value)對的形式。一個JSON結構如下:
{
"name":"IT筆錄",
"domain":"www.itbilu.com",
"menus":["Node.js","JavaScript","數據庫","Linux"],
"config":
{
"db":"dbPath",
"host":"192.168.1.22",
"port":80
}
}
結合上例,JSON特征如下:
JSON數據包含在一個大括號{}中,由{開始,}結束
JSON的鍵/值由:分隔,如:"name":"IT筆錄"
JSON的鍵必須使用雙引號""
每組鍵/值對使用,分隔,且最后一個屬性后面不能有逗號。
JSON的值根據數據類型的不同,有不同的表現形式
2. JSON值類型
JSON可以理解為JavaScript對象的序列化形式,JSON的值也可以理解為JavaScript對象的值。但并不是JavaScript對象的所有值都可以JSON值中表現,JSON中的值類型有:
字符串類型(String),需要包在雙引號""
null中
布爾類型(true或false)。
數組(Array),需要包在方括號[]中
對象(子JSON),需要包在大括號{}中
以上5種數據類型都可以JSON中使用。JSON數據值也有所限制,除上面的數據類型外,如:JavaScript中的函數(Function)、二進制類型等都不能在JSON中使用。
3. JavaScript中的JSON對象
3.1eval()函數與JSON對象
ECMAScipt 5之前,可以使用eval()函數將JSON字符串轉換為JavaScript的Object。
ECMAScipt 5中增加了JSON,相比eval()函數,JSON對象處理JSON數據更為方便和準確。
如,分別使用eval()和JSON處理Unicode編碼數據:
var code = '"\u2028\u2029"';
JSON.parse(code); // 正常執行
eval(code); // 執行失敗
3.2JSON對象中的方法
JSON對象使用非常簡單,該對只提供了兩個對象方法,分別用于將對象序化為JSON字符串和將JSON字符串反序列化為JavaScriptObject。
JSON.parse(),解析JSON字符串,并返回解析值(JavaScript對象)。
JSON.stringify(),序列化JavaScript對象,并返回序列化后的JSON字符串。返回值只包含合法的JSON值,不合法的值將被丟棄。
如,使用JSON.stringify()序列化一個JavaScript對象:
var site = {
name:'IT筆錄',
domain:'www.itbilu.com',
get: function () {
return this.name;
}
}
JSON.stringify(site); // {"name":"IT筆錄","domain":"www.itbilu.com"}
如上所示,function是不合法的JSON值,JSON.stringify()序列化時將其丟棄。
使用JSON.parse()解析JSON字符串:
var jsonString = '{"name":"IT筆錄","domain":"www.itbilu.com"}';
JSON.parse(jsonString); // { name: 'IT筆錄', domain: 'www.itbilu.com' }