initial commit from rev. 632
This commit is contained in:
148
gulliver/js/json/core/json.js
Executable file
148
gulliver/js/json/core/json.js
Executable file
@@ -0,0 +1,148 @@
|
||||
/* 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);
|
||||
}
|
||||
Reference in New Issue
Block a user