Last active
November 17, 2023 22:27
-
-
Save GoodBoyNinja/ee2d2cd2defdf62cc8cc80ab3a4f70cf to your computer and use it in GitHub Desktop.
A compact one line version of the json2.js JSON.stringify() and JSON.parse() functions. The function returns the library as a text string so you can use it in an expression.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function libForExpressions(){ | |
var theLib = '(function includeJSON(){ if (!this.JSON) { this.JSON = {}; } (function () { function f(n) { return n < 10 ? \'0\' + n : n; } if (typeof Date.prototype.toJSON !== \'function\') { Date.prototype.toJSON = function (key) { return isFinite(this.valueOf()) ? this.getUTCFullYear() + \'-\' + f(this.getUTCMonth() + 1) + \'-\' + f(this.getUTCDate()) + \'T\' + f(this.getUTCHours()) + \':\' + f(this.getUTCMinutes()) + \':\' + f(this.getUTCSeconds()) + \'Z\' : null; }; String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (key) { return this.valueOf(); }; } var cx = \/[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]\/g, escapable = \/[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]\/g, gap, indent, meta = { \'\\b\': \'\\\\b\', \'\\t\': \'\\\\t\', \'\\n\': \'\\\\n\', \'\\f\': \'\\\\f\', \'\\r\': \'\\\\r\', \'\"\' : \'\\\\\"\', \'\\\\\': \'\\\\\\\\\' }, rep; function quote(string) { escapable.lastIndex = 0; return escapable.test(string) ? \'\"\' + string.replace(escapable, function (a) { var c = meta[a]; return typeof c === \'string\' ? c : \'\\\\u\' + (\'0000\' + a.charCodeAt(0).toString(16)).slice(-4); }) + \'\"\' : \'\"\' + string + \'\"\'; } function str(key, holder) { var i, k, v, length, mind = gap, partial, value = holder[key]; if (value && typeof value === \'object\' && typeof value.toJSON === \'function\') { value = value.toJSON(key); } if (typeof rep === \'function\') { value = rep.call(holder, key, value); } switch (typeof value) { case \'string\': return quote(value); case \'number\': return isFinite(value) ? String(value) : \'null\'; case \'boolean\': case \'null\': return String(value); case \'object\': if (!value) { return \'null\'; } gap += indent; partial = []; if (Object.prototype.toString.apply(value) === \'[object Array]\') { length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || \'null\'; } v = partial.length === 0 ? \'[]\' : gap ? \'[\\n\' + gap + partial.join(\',\\n\' + gap) + \'\\n\' + mind + \']\' : \'[\' + partial.join(\',\') + \']\'; gap = mind; return v; } if (rep && typeof rep === \'object\') { length = rep.length; for (i = 0; i < length; i += 1) { k = rep[i]; if (typeof k === \'string\') { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? \': \' : \':\') + v); } } } } else { for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? \': \' : \':\') + v); } } } } v = partial.length === 0 ? \'{}\' : gap ? \'{\\n\' + gap + partial.join(\',\\n\' + gap) + \'\\n\' + mind + \'}\' : \'{\' + partial.join(\',\') + \'}\'; gap = mind; return v; } } if (typeof JSON.stringify !== \'function\') { JSON.stringify = function (value, replacer, space) { var i; gap = \'\'; indent = \'\'; if (typeof space === \'number\') { for (i = 0; i < space; i += 1) { indent += \' \'; } } else if (typeof space === \'string\') { indent = space; } rep = replacer; if (replacer && typeof replacer !== \'function\' && (typeof replacer !== \'object\' || typeof replacer.length !== \'number\')) { throw new Error(\'JSON.stringify\'); } return str(\'\', {\'\': value}); }; } if (typeof JSON.parse !== \'function\') { JSON.parse = function (text, reviver) { var j; function walk(holder, key) { var k, v, value = holder[key]; if (value && typeof value === \'object\') { for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); } text = String(text); cx.lastIndex = 0; if (cx.test(text)) { text = text.replace(cx, function (a) { return \'\\\\u\' + (\'0000\' + a.charCodeAt(0).toString(16)).slice(-4); }); } if (\/^[\\],:{}\\s]*$\/ .test(text.replace(\/\\\\(?:[\"\\\\\\\/bfnrt]|u[0-9a-fA-F]{4})\/g, \'@\') .replace(\/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?\/g, \']\') .replace(\/(?:^|:|,)(?:\\s*\\[)+\/g, \'\'))) { j = eval(\'(\' + text + \')\'); return typeof reviver === \'function\' ? walk({\'\': j}, \'\') : j; } throw new SyntaxError(\'JSON.parse\'); }; } }()); })();\n'; | |
return theLib; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment