NL wrote:
> When loading both Prototype Release 1.5 and the The open source code
> of a JSON parser and JSON stringifier library (http://www.json.org/
> json.js).
>
> I tried this on Firefox 1.5.0.9 (Mac)
>
> I haven't looked at the reason but have  a feeling this may impact
> other libraries as well.
>   
Yes, the www.json.org implementation has some funky stuff.  For one, in 
the current version (2007-01-10), Object.prototype.toJSONString will 
cause problems with lots of other JS code (anything that iterates 
objects with for-in).  Here is an implementation based on a previous 
json.org implementation.  There are lots of other flavors out there too.

/*
Copyright (c) 2005 JSON.org
*/

/*
    The global object JSON contains two methods.

    JSON.encode(value) takes a JavaScript value and produces a JSON text.
    The value must not be cyclical.

    JSON.decode(text) takes a JSON text and produces a JavaScript value. 
It will
    return false if there is an error.
*/
var JSON = function () {
    var m = {
      '\b': '\\b',
      '\t': '\\t',
      '\n': '\\n',
      '\f': '\\f',
      '\r': '\\r',
      '"' : '\\"',
      '\\': '\\\\'
  },
  s = {
      'boolean': function (x) {
    return String(x);
      },
      number: function (x) {
    return isFinite(x) ? String(x) : '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: function (x) {
    if (x) {
        var a = [], b, f, i, l, v;
        if (x instanceof Array) {
      a[0] = '[';
      l = x.length;
      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] = ']';
                    //
                    // Addition by Ken Snyder
                    //
        } else if (x instanceof HTMLElement || x==window || x==opener) {
            return;
        //
        // End Addition
        //
        } else if (x instanceof Object) {
      a[0] = '{';
      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] = '}';
        } else {
      return;
        }
        return a.join('');
    }
    return 'null';
      }
  };
    return {
//  copyright: '(c)2005 JSON.org',
//  license: 'http://www.JSON.org/license.html',
/*
    Stringify a JavaScript value, producing a JSON text.
*/
  encode: function (v) {
      var f = s[typeof v];
      if (f) {
    v = f(v);
    if (typeof v == 'string') {
        return v;
    }
      }
      return null;
  },
/*
    Parse a JSON text, producing a JavaScript value.
    It returns false if there is a syntax error.
*/
  decode: function (text) {
      try {
    return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
      text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
        eval('(' + text + ')');
      } catch (e) {
    return false;
      }
  }
    };
}();
// optional compatibility with stringify/parse:
JSON.stringify = JSON.encode;
JSON.parse = JSON.decode;

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype: Core" group.
To post to this group, send email to prototype-core@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to