| 導購 | 订阅 | 在线投稿
分享
 
 
 

JavaScript中的JSON

2008-10-21 08:21:22  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  作者:Douglas Crockford
  原文網址:http://www.json.org/js.html
  譯者:可愛的猴子
  JavaScript這種編程語言首要的目的是爲Netscape Navigator提供一種頁面腳本語言。它仍被普遍的認爲是Java的一個子集,但事實並非如此。它是一種語法類似c語言並且支持面向對象的Scheme-like語言。JavaScript使用了ECMAScript語言規範第三版進行了標准化。
  JSON是JavaScript面向對象語法的一個子集。由于JSON是JavaScript的一個子集,因此它可清晰的運用于此語言中。
  var myJSONObject = {"bindings": [
   {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
   {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
   {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
   ]
  };
  上面的示例,創建了一個包括單獨成員」bindings」的對象,此成員包括一個含有三個對象(」ircEvent」, 「method」, 與 「regex」)的數組
  成員可以通過.或者下標操作符檢索。
  myJSONObject.bindings[0].method // "newURI"
  爲了將JSON文本轉換爲對象,可以使用eval()函數。eval()函數調用JavaScript編輯器。由于JSON是JavaScript的子集,因此編譯器將正確的解析文本並産生對象結構。文本必須括在括號中避免産生JavaScript的語法歧義。
  var myObject = eval('(' + myJSONtext + ')');
  eval函數非常快速。它可以編譯執行任何JavaScript程序,因此産生了安全性問題。當使用可信任與完善的源代碼時才可以使用eval函數。這樣可以更安全的使用JSON解析器。使用XMLHttpRequest的web應用,頁面之間的通訊只允許同源,因此是可以信任的。但這卻不是完善的。如果服務器沒有嚴謹的JSON編碼,或者沒有嚴格的輸入驗證,那麽可能傳送包括危險腳本的無效JSON文本。eval函數將執行惡意的腳本。
  使用JSON解析器可以防止此類事件。JSON解析器只能辨識JSON文本,拒絕所有腳本。提供了本地JSON支持的浏覽器的JSON解析器將遠快于eval函數。預計未來的ECMAScript標准將支持本地JSON。
  var myObject = JSON.parse(myJSONtext, reviver);
  一個替換函數(reviver function)做爲可選參數被最終結果的每一級的鍵(key)與值(value)調用。 每個值都將被替換函數的值代替。這可以用來將一般的類改變成僞類的實例,或者將日期字符串轉變爲日期對象。
  myData = JSON.parse(text, function (key, value) {
   var type;
   if (value && typeof value === 'object') {
   type = value.type;
   if (typeof type === 'string' && typeof window[type] === 'function') {
   return new (window[type])(value);
   }
   }
   return value;
  });
  JSON stringifier進行反向操作,可以把JavaScript數據結構轉換爲JSON文本。JSON不支持循環數據結構,因此應小心不要爲JSON stringifier提供循環結構。
  var myJSONText = JSON.stringify(myObject, replacer);
  如果stringify函數發現一個帶有toJSON方法的對象,它將執行此方法,並且返回産生的值。這樣一個對象就可以決定自己的JSON表現。
  stringifier方法可以攜帶一個可選的字符串數組。這些字符串被用于選擇包括在JSON文本中的屬性。
  stringifier方法可以攜帶一個可選的替代(replacer)函數。它將在結構中每個值的toJSON方法(如果有的話)後面執行。它將每個鍵與值做爲參數傳遞,當然對象要包含這個鍵。值將被stringified返回。
  如果沒有提供數組或替代函數,一個用于忽略被集成的屬性的可選替代函數將被提供。如果想要所有被繼承的屬性,可以提供一個簡單的替換函數:
  var myJSONText = JSON.stringify(myObject, function (key, value) {
   return value;
  });
  值在JSON中不代表任何內容,函數與未定義(undefined)被排除在外。
  不能確定的數量將被替換爲null。爲了替代其它的值,可以像下面一樣使用替換(replacer)函數
  function replacer(key, value) {
   if (typeof value === 'number' && !isFinite(value)) {
   return String(value);
   }
   return value;
  }
 
作者:Douglas Crockford 原文網址:[url=http://www.json.org/js.html]http://www.json.org/js.html[/url] 譯者:可愛的猴子 JavaScript這種編程語言首要的目的是爲Netscape Navigator提供一種頁面腳本語言。它仍被普遍的認爲是Java的一個子集,但事實並非如此。它是一種語法類似c語言並且支持面向對象的Scheme-like語言。JavaScript使用了ECMAScript語言規範第三版進行了標准化。 JSON是JavaScript面向對象語法的一個子集。由于JSON是JavaScript的一個子集,因此它可清晰的運用于此語言中。 var myJSONObject = {"bindings": [ {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}, {"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"}, {"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"} ] }; 上面的示例,創建了一個包括單獨成員」bindings」的對象,此成員包括一個含有三個對象(」ircEvent」, 「method」, 與 「regex」)的數組 成員可以通過.或者下標操作符檢索。 myJSONObject.bindings[0].method // "newURI" 爲了將JSON文本轉換爲對象,可以使用eval()函數。eval()函數調用JavaScript編輯器。由于JSON是JavaScript的子集,因此編譯器將正確的解析文本並産生對象結構。文本必須括在括號中避免産生JavaScript的語法歧義。 var myObject = eval('(' + myJSONtext + ')'); eval函數非常快速。它可以編譯執行任何JavaScript程序,因此産生了安全性問題。當使用可信任與完善的源代碼時才可以使用eval函數。這樣可以更安全的使用JSON解析器。使用XMLHttpRequest的web應用,頁面之間的通訊只允許同源,因此是可以信任的。但這卻不是完善的。如果服務器沒有嚴謹的JSON編碼,或者沒有嚴格的輸入驗證,那麽可能傳送包括危險腳本的無效JSON文本。eval函數將執行惡意的腳本。 使用JSON解析器可以防止此類事件。JSON解析器只能辨識JSON文本,拒絕所有腳本。提供了本地JSON支持的浏覽器的JSON解析器將遠快于eval函數。預計未來的ECMAScript標准將支持本地JSON。 var myObject = JSON.parse(myJSONtext, reviver); 一個替換函數(reviver function)做爲可選參數被最終結果的每一級的鍵(key)與值(value)調用。 每個值都將被替換函數的值代替。這可以用來將一般的類改變成僞類的實例,或者將日期字符串轉變爲日期對象。 myData = JSON.parse(text, function (key, value) { var type; if (value && typeof value === 'object') { type = value.type; if (typeof type === 'string' && typeof window[type] === 'function') { return new (window[type])(value); } } return value; }); JSON stringifier進行反向操作,可以把JavaScript數據結構轉換爲JSON文本。JSON不支持循環數據結構,因此應小心不要爲JSON stringifier提供循環結構。 var myJSONText = JSON.stringify(myObject, replacer); 如果stringify函數發現一個帶有toJSON方法的對象,它將執行此方法,並且返回産生的值。這樣一個對象就可以決定自己的JSON表現。 stringifier方法可以攜帶一個可選的字符串數組。這些字符串被用于選擇包括在JSON文本中的屬性。 stringifier方法可以攜帶一個可選的替代(replacer)函數。它將在結構中每個值的toJSON方法(如果有的話)後面執行。它將每個鍵與值做爲參數傳遞,當然對象要包含這個鍵。值將被stringified返回。 如果沒有提供數組或替代函數,一個用于忽略被集成的屬性的可選替代函數將被提供。如果想要所有被繼承的屬性,可以提供一個簡單的替換函數: var myJSONText = JSON.stringify(myObject, function (key, value) { return value; }); 值在JSON中不代表任何內容,函數與未定義(undefined)被排除在外。 不能確定的數量將被替換爲null。爲了替代其它的值,可以像下面一樣使用替換(replacer)函數 function replacer(key, value) { if (typeof value === 'number' && !isFinite(value)) { return String(value); } return value; }
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
  免責聲明:本文僅代表作者個人觀點,與王朝網絡無關。王朝網絡登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
© 2005- 王朝網路 版權所有