Created
January 13, 2020 15:46
-
-
Save crates/904e45ea8f42a5522115488c6ea51bd7 to your computer and use it in GitHub Desktop.
Polyfill for JSON.Parse
This file contains hidden or 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
// POLYFILL FOR JSON.PARSE IN UNSUPP BROWSERS: | |
if (!window.JSON) { | |
window.JSON = { | |
parse: function(sJSON) { return eval('(' + sJSON + ')'); }, | |
stringify: (function () { | |
var toString = Object.prototype.toString; | |
var isArray = Array.isArray || function (a) { return toString.call(a) === '[object Array]'; }; | |
var escMap = {'"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t'}; | |
var escFunc = function (m) { return escMap[m] || '\\u' + (m.charCodeAt(0) + 0x10000).toString(16).substr(1); }; | |
var escRE = /[\\"\u0000-\u001F\u2028\u2029]/g; | |
return function stringify(value) { | |
if (value == null) { | |
return 'null'; | |
} else if (typeof value === 'number') { | |
return isFinite(value) ? value.toString() : 'null'; | |
} else if (typeof value === 'boolean') { | |
return value.toString(); | |
} else if (typeof value === 'object') { | |
if (typeof value.toJSON === 'function') { | |
return stringify(value.toJSON()); | |
} else if (isArray(value)) { | |
var res = '['; | |
for (var i = 0; i < value.length; i++) | |
res += (i ? ', ' : '') + stringify(value[i]); | |
return res + ']'; | |
} else if (toString.call(value) === '[object Object]') { | |
var tmp = []; | |
for (var k in value) { | |
if (value.hasOwnProperty(k)) | |
tmp.push(stringify(k) + ': ' + stringify(value[k])); | |
} | |
return '{' + tmp.join(', ') + '}'; | |
} | |
} | |
return '"' + value.toString().replace(escRE, escFunc) + '"'; | |
}; | |
})() | |
}; | |
}// if (!window.JSON) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment