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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---