topical media & game development

talk show tell print

basic-ajax-11-json.js / js



  /*
      json.js
      2006-04-28
  
      This file adds these methods to JavaScript:
  
          object.toJSONString()
  
              This method produces a JSON text from an object. The
              object must not contain any cyclical references.
  
          array.toJSONString()
  
              This method produces a JSON text from an array. The
              array must not contain any cyclical references.
  
          string.parseJSON()
  
              This method parses a JSON text to produce an object or
              array. It will return false if there is an error.
  */
  (function () {
      var m = {
              '\b': '\\b',
              '\t': '\\t',
              '\n': '\\n',
              '\f': '\\f',
              '\r': '\\r',
              '"' : '\\"',
              '\\': '\\\\'
          },
          s = {
              array: function (x) {
                  var a = ['['], b, f, i, l = x.length, v;
                  for (i = 0; i < l; i += 1) {
                      v = x[i];
                      f = s[typeof v];
                      if (f) {
                          v = f(v);
                          if (typeof v == 'string') {
                              if (b) {
                                  a[a.length] = ',';
                              }
                              a[a.length] = v;
                              b = true;
                          }
                      }
                  }
                  a[a.length] = ']';
                  return a.join('');
              },
              'boolean': function (x) {
                  return String(x);
              },
              'null': function (x) {
                  return "null";
              },
              number: function (x) {
                  return isFinite(x) ? String(x) : 'null';
              },
              object: function (x) {
                  if (x) {
                      if (x instanceof Array) {
                          return s.array(x);
                      }
                      var a = ['{'], b, f, i, v;
                      for (i in x) {
                          v = x[i];
                          f = s[typeof v];
                          if (f) {
                              v = f(v);
                              if (typeof v == 'string') {
                                  if (b) {
                                      a[a.length] = ',';
                                  }
                                  a.push(s.string(i), ':', v);
                                  b = true;
                              }
                          }
                      }
                      a[a.length] = '}';
                      return a.join('');
                  }
                  return 'null';
              },
              string: function (x) {
                  if (/["\\\x00-\x1f]/.test(x)) {
                      x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                          var c = m[b];
                          if (c) {
                              return c;
                          }
                          c = b.charCodeAt();
                          return '\\u00' +
                              Math.floor(c / 16).toString(16) +
                              (c % 16).toString(16);
                      });
                  }
                  return '"' + x + '"';
              }
          };
  
      Object.prototype.toJSONString = function () {
          return s.object(this);
      };
  
      Array.prototype.toJSONString = function () {
          return s.array(this);
      };
  })();
  
  String.prototype.parseJSON = function () {
      try {
          return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
                  this.replace(/"(\\.|[^"\\])*"/g, ''))) &&
              eval('(' + this + ')');
      } catch (e) {
          return false;
      }
  };


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.