#7475 (http://dev.rubyonrails.org/ticket/7475) will fix this once it's applied.
I admire the hell out of Doug Crockford, but sometimes I want to shove a JSON string down his throat. Cheers, Andrew On Feb 7, 10:21 pm, Ken Snyder <[EMAIL PROTECTED]> wrote: > 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, thewww.json.orgimplementation 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 -~----------~----~----~----~------~----~------~--~---
