JSONʵJSṹõļ-ֵԶ,XML,ҲҪرĽ,˸ʺWebϵǰͨ,йJSON,Բο:http://www.json.org

//JSONı
var JSON = new Hash({

 //JSONݱ
 encode: function(obj){
  //ݶͷֱת
  switch ($type(obj)){
   //ַ
   case 'string':
    //滻ansiΪ0~31ַ
    return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
   //
   case 'array':
    //ÿһ,ٹ˵Ϊյ
    return '[' + String(obj.map(JSON.encode).filter($defined)) + ']';
   //-ֵ
   case 'object': case 'hash':
    var string = [];
    //
    Hash.each(obj, function(value, key){
     var json = JSON.encode(value);
     //ֻҪֵ벻Ϊʱ
     if (json) string.push(JSON.encode(key) + ':' + json);
    });
    return '{' + string + '}';
   //ֺͲ,ֱתΪַ
   case 'number': case 'boolean': return String(obj);
   //ΪǷ
   case false: return 'null';
  }
  return null;
 },

 //Ҫתַ
 $specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},

 //滻Ҫתַ
 $replaceChars: function(chr){
  //ַб,תΪunicodeʾ
  return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
 },

 //
 decode: function(string, secure){
  //ֻзǿַҪ
  if ($type(string) != 'string' || !string.length) return null;
  //secureΪtrue,ҪϸJSONʽ,{"a":"b", "c" : 2}{'a' : 'b', c : 2}
  if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
  return eval('(' + string + ')');
 }

});

//ΪʾtoJSONʵ
Native.implement([Hash, Array, String, Number], {

 toJSON: function(){
  return JSON.encode(this);
 }

});

