前言
作為一個前端需要掌握一種資料格式:json資料格式。在和伺服器互動時,伺服器會返回一組json資料,前端需要處理這組資料,並選擇性地將所需資料呈現在用戶端。在json還沒誕生前,互連網上傳輸結構化資料的方式是交給XML來完成的,那時候不少人認為XML過於繁瑣、冗長,希望能有另一種資料格式可以替代XML。
什麼是JSON
一句話:JSON就是(JavaScript Object Notation),它是一種輕量級的資料交換格式。
以下的語句就是JSON
{ "name":"bingkingboy", "age":25 }{ "first":{ "name":"bingkingboy", "age":25 }, "second":{ "name":"feifei", "age":20 }}
工欲善其事必先利其器,要想瞭解JSON就必須知道它的文法,才能更好的學習它。
JSON的基本文法
JSON的四個基本規則: 並列的資料之間用逗號(“, “)分隔。 映射用冒號(“: “)表示。 並列資料的集合(數組)用方括弧(“[]”)表示。 映射的集合(對象)用大括弧(“{}”)表示。
知道了JSON的基本規則,就可以很容易的構建JSON資料格式
解析和序列化
JSON之所以流行,擁有與JavaScript類似的文法並不是全部原因,更重要的一個原因是,可以把JSON資料結構解析為有用的JavaScript對象。
JavaScript解析和序列化JSON的方法
evel()
早期的JSON解析器上基本就是使用JavaScript的evel()的函數,不過在使用evel()對JSON資料結構求值存在風險,因為可能會執行一些惡意代碼,使用時需謹慎。
stringify() 把JavaScript對象序列化為JSON字串
JSON.stringify()除了要序列化的JavaScript對象外,還可以接收另外兩個選擇性參數,這兩個參數用於指定以不同方式序列化JavaScript對象。第一個參數是個過濾器,可以是數組,也可以是函數;第二個參數是一個選項,表示是否在JSON字串中保留縮排。
var book = { "title":"woaiwojia", "authors":["weiwei","kuakua"], "year":2010 } var jsonText1 = JSON.stringify(book); var jsonText2 = JSON.stringify(book,["title","year"]); console.log(jsonText1); console.log(jsonText2); {"title":"woaiwojia","authors":["weiwei","kuakua"],"year":2010} test5.html:17 {"title":"woaiwojia","year":2010} parse()
把JSON字串解析為原生JavaScript值,JSON.parse()方法和JSON.stringify()剛好相反,不做舉例。
JSON的優劣
優點: 格式比較簡單,易於讀寫,格式都是壓縮的,佔用頻寬小。 支援多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Prel,
PHP, Python, Ruby等伺服器端語言,便於伺服器端的解析。
缺點: 要求字元集必須是Unicode,受約束性強。 文法過於嚴謹,必須遵守JSON文法的四個基本法則。