149 lines
4.3 KiB
JavaScript
Executable File
149 lines
4.3 KiB
JavaScript
Executable File
/* PACKAGE : json.js 2007-03-21
|
|
*/
|
|
if (!Object.prototype.toJSONString) {
|
|
Array.prototype.toJSONString = function () {
|
|
var a = ['['],
|
|
b,
|
|
i,
|
|
l = this.length,
|
|
v;
|
|
function p(s) {
|
|
if (b) {
|
|
a.push(',');
|
|
}
|
|
a.push(s);
|
|
b = true;
|
|
}
|
|
for (i = 0; i < l; i += 1) {
|
|
v = this[i];
|
|
switch (typeof v) {
|
|
case 'undefined':
|
|
case 'function':
|
|
case 'unknown':
|
|
break;
|
|
case 'object':
|
|
if (v) {
|
|
if (typeof v.toJSONString === 'function') {
|
|
p(v.toJSONString());
|
|
}
|
|
} else {
|
|
p("null");
|
|
}
|
|
break;
|
|
default:
|
|
p(v.toJSONString());
|
|
}
|
|
}
|
|
a.push(']');
|
|
return a.join('');
|
|
};
|
|
Boolean.prototype.toJSONString = function () {
|
|
return String(this);
|
|
};
|
|
Date.prototype.toJSONString = function () {
|
|
function f(n) {
|
|
return n < 10 ? '0' + n : n;
|
|
}
|
|
return '"' + this.getFullYear() + '-' +
|
|
f(this.getMonth() + 1) + '-' +
|
|
f(this.getDate()) + 'T' +
|
|
f(this.getHours()) + ':' +
|
|
f(this.getMinutes()) + ':' +
|
|
f(this.getSeconds()) + '"';
|
|
};
|
|
Number.prototype.toJSONString = function () {
|
|
return isFinite(this) ? String(this) : "null";
|
|
};
|
|
Object.prototype.toJSONString = function () {
|
|
var a = ['{'],
|
|
b,
|
|
k,
|
|
v;
|
|
function p(s) {
|
|
if (b) {
|
|
a.push(',');
|
|
}
|
|
a.push(k.toJSONString(), ':', s);
|
|
b = true;
|
|
}
|
|
for (k in this) {
|
|
if (this.hasOwnProperty(k)) {
|
|
v = this[k];
|
|
switch (typeof v) {
|
|
case 'undefined':
|
|
case 'function':
|
|
case 'unknown':
|
|
break;
|
|
case 'object':
|
|
if (v) {
|
|
if (typeof v.toJSONString === 'function') {
|
|
p(v.toJSONString());
|
|
}
|
|
} else {
|
|
p("null");
|
|
}
|
|
break;
|
|
default:
|
|
p(v.toJSONString());
|
|
}
|
|
}
|
|
}
|
|
a.push('}');
|
|
return a.join('');
|
|
};
|
|
|
|
(function (s) {
|
|
var m = {
|
|
'\b': '\\b',
|
|
'\t': '\\t',
|
|
'\n': '\\n',
|
|
'\f': '\\f',
|
|
'\r': '\\r',
|
|
'"' : '\\"',
|
|
'\\': '\\\\'
|
|
};
|
|
s.parseJSON = function (filter) {
|
|
try {
|
|
if (/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.
|
|
test(this)) {
|
|
var j = eval('(' + this + ')');
|
|
if (typeof filter === 'function') {
|
|
|
|
function walk(k, v) {
|
|
if (v && typeof v === 'object') {
|
|
for (var i in v) {
|
|
if (v.hasOwnProperty(i)) {
|
|
v[i] = walk(i, v[i]);
|
|
}
|
|
}
|
|
}
|
|
return filter(k, v);
|
|
}
|
|
|
|
j = walk('', j);
|
|
}
|
|
return j;
|
|
}
|
|
} catch (e) {
|
|
}
|
|
throw new SyntaxError("parseJSON");
|
|
};
|
|
|
|
s.toJSONString = function () {
|
|
if (/["\\\x00-\x1f]/.test(this)) {
|
|
return '"' + this.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 '"' + this + '"';
|
|
};
|
|
})(String.prototype);
|
|
}
|