轉載自 ?
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); // 正常執(zhí)行
eval(code); // 執(zhí)行失敗
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' }