tRikSonic

Polyfill untuk JSON.parse

Terakhir diperbarui : 7 Januari 2019 - 07.59
Polyfill untuk JSON.parse ini hanya berkas salinan yang saya tulis disini
Mengenai apa itu Polyfill, silahkan kunjungi tautan berikut Polyfill (programming)
(function (a, b) {
    typeof define == "function" && define.amd ? define("json", ["exports"], b) : b(typeof exports == "object" && exports || this.JSON || (this.JSON = {}))
})(this, function (a) {
    var b = {}.toString,
        c = {}.hasOwnProperty,
        d, e, f;
    return e = typeof a.stringify == "function", f = typeof a.parse == "function",
        function () {
            var c = '{"result":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}',
                d, g, h;
            if (e) {
                d = function () {
                    return 1
                }, d.toJSON = d;
                try {
                    switch (!1) {
                    case a.stringify(0) === "0":
                    case a.stringify(new 0..constructor) === "0":
                    case a.stringify(new "".constructor) == '""':
                    case a.stringify(b) === void 0:
                    case a.stringify(void 0) === void 0:
                    case a.stringify() === void 0:
                    case a.stringify(d) === "1":
                    case a.stringify([d]) == "[1]":
                    case a.stringify([void 0]) == "[null]":
                    case a.stringify(null) == "null":
                    case a.stringify([void 0, b, null]) == "[null,null,null]":
                    case a.stringify({
                        result: [d, true, false, null, "\0\b\n\f\r "]
                    }) == c:
                    case a.stringify(null, d) === "1":
                    case a.stringify([1, 2], null, 1) == "[\n 1,\n 2\n]":
                    case (d = new Date(-864e13)).getUTCFullYear() != -271821 || a.stringify(d) == '"-271821-04-20T00:00:00.000Z"':
                    case (d = new Date(864e13)).getUTCFullYear() != 275760 || a.stringify(d) == '"+275760-09-13T00:00:00.000Z"':
                        e = !1
                    }
                } catch (i) {
                    e = !1
                }
            }
            if (f) try {
                if (a.parse("0") === 0 && !a.parse(!1)) {
                    h = a.parse(c);
                    if (f = h.result.length == 5 && h.result[0] == 1) {
                        try {
                            f = !a.parse('" "')
                        } catch (i) {}
                        if (f) try {
                            f = a.parse("+1") != 1 && a.parse("01") != 1
                        } catch (i) {}
                    }
                }
            } catch (i) {
                f = !1
            }
        }(), typeof c != "function" && (c = function () {
            var a, c = {},
                d = c.constructor;
            return (c.__proto__ = null, c.__proto__ = {
                toString: 1
            }, c).toString != b ? a = function e(a) {
                var b = this.__proto__,
                    c = a in (this.__proto__ = null, this);
                return this.__proto__ = b, c
            } : a = function f(a) {
                var b = (this.constructor || d).prototype;
                return a in this && !(a in b && this[a] === b[a])
            }, a
        }()), d = function () {
            function g() {
                this.valueOf = 0
            }
            var a, d, e, f = 0;
            g.prototype.valueOf = 0, a = new g;
            for (d in a) c.call(a, d) && (f += 1);
            return a = null, f ? f == 2 ? e = function (d, e) {
                var f = {},
                    g = b.call(d) == "[object Function]",
                    h;
                for (h in d)(!g || h != "prototype") && !c.call(f, h) && (f[h] = 1) && c.call(d, h) && e(h)
            } : e = function (d, e) {
                var f = b.call(d) == "[object Function]",
                    g, h;
                for (g in d)(!f || g != "prototype") && c.call(d, g) && !(h = g === "constructor") && e(g);
                (h || c.call(d, "constructor")) && e("constructor")
            } : (a = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"], e = function (e, f) {
                var g = b.call(e) == "[object Function]",
                    h, i;
                for (h in e)(!g || h != "prototype") && c.call(e, h) && f(h);
                for (i = a.length; i--;) h = a[i], c.call(e, h) && f(h)
            }), e
        }(), e || (a.stringify = function () {
            function e(a, b) {
                return b = "000000" + (b || 0), b.slice(b.length - a)
            }

            function f(b) {
                var c = '"',
                    d = 0,
                    f;
                for (; f = b.charAt(d); d += 1) c += '\\"\b\f\n\r '.indexOf(f) > -1 ? a[f] : f < " " ? "\\u00" + e(2, f.charCodeAt(0).toString(16)) : f;
                return c + '"'
            }

            function g(a, h, i, j, k, l, m) {
                var n = h[a],
                    o, p, q, r, s, t, u, v;
                typeof n == "object" && n && (b.call(n) == "[object Date]" && !c.call(n, "toJSON") ? n > -1 / 0 && n < 1 / 0 ? (p = n.getUTCFullYear(), n = (p <= 0 || p >= 1e4 ? (p < 0 ? "-" : "+") + e(6, p < 0 ? -p : p) : e(4, p)) + "-" + e(2, n.getUTCMonth() + 1) + "-" + e(2, n.getUTCDate()) + "T" + e(2, n.getUTCHours()) + ":" + e(2, n.getUTCMinutes()) + ":" + e(2, n.getUTCSeconds()) + "." + e(3, n.getUTCMilliseconds()) + "Z") : n = null : typeof n.toJSON == "function" && (n = n.toJSON(a))), i && (n = i.call(h, a, n));
                if (n === null) return "null";
                o = b.call(n);
                switch (o) {
                case "[object Boolean]":
                    return "" + n;
                case "[object Number]":
                    return n > -1 / 0 && n < 1 / 0 ? "" + n : "null";
                case "[object String]":
                    return f(n)
                }
                if (typeof n == "object") {
                    for (t = m.length; t--;)
                        if (m[t] == n) throw TypeError("Cyclic structures cannot be serialized.");
                    m.push(n), q = [], u = l, l += k;
                    if (o == "[object Array]") {
                        for (s = 0, t = n.length; s < t; v || (v = !0), s++) r = g(s, n, i, j, k, l, m), q.push(r === void 0 ? "null" : r);
                        return v ? k ? "[\n" + l + q.join(",\n" + l) + "\n" + u + "]" : "[" + q.join(",") + "]" : "[]"
                    }
                    return d(j || n, function (a) {
                        var b = g(a, n, i, j, k, l, m);
                        b !== void 0 && q.push(f(a) + ":" + (k ? " " : "") + b), v || (v = !0)
                    }), v ? k ? "{\n" + l + q.join(",\n" + l) + "\n" + u + "}" : "{" + q.join(",") + "}" : "{}"
                }
            }

            function h(a, c, d) {
                var e = "",
                    f, h, i, j;
                if (typeof c == "function" || typeof c == "object" && c)
                    if (b.call(c) == "[object Function]") f = c;
                    else if (b.call(c) == "[object Array]") {
                    h = {};
                    for (i = c.length; i--;) j = c[i], j && (b.call(j) == "[object String]" || b.call(j) == "[object Number]") && (h[j] = 1)
                }
                if (d != null && d !== "")
                    if (b.call(d) == "[object Number]") {
                        if ((d -= d % 1) > 0)
                            for (e = "", d > 10 && (d = 10); e.length < d;) e += " "
                    } else b.call(d) == "[object String]" && (e = d.length <= 10 ? d : d.slice(0, 10));
                return g("$", {
                    $: a
                }, f, h, e, "", [])
            }
            var a = {
                "\\": "\\\\",
                '"': '\\"',
                "\b": "\\b",
                "\f": "\\f",
                "\n": "\\n",
                "\r": "\\r",
                " ": "\\t"
            };
            return h
        }()), f || (a.parse = function () {
            function e(a) {
                this.source = a, this.index = 0
            }

            function f() {
                for (var b = this.source, d = this.source.length, e, f, g, h, i; this.index < d;) {
                    e = b.charAt(this.index);
                    switch (e) {
                    case " ":
                    case "\r":
                    case "\n":
                    case " ":
                        this.index += 1;
                        break;
                    case "{":
                    case "}":
                    case "[":
                    case "]":
                    case ":":
                    case ",":
                        return this.index += 1, e;
                    case '"':
                        f = "@", this.index += 1;
                        while (this.index < d) {
                            e = b.charAt(this.index);
                            if (e < " ") throw SyntaxError("Unescaped control character in string.");
                            if (e == "\\") {
                                this.index += 1, e = b.charAt(this.index);
                                if ('\\"/btnfr'.indexOf(e) > -1) f += a[e], this.index += 1;
                                else {
                                    if (e != "u") throw SyntaxError("Invalid escape sequence in string.");
                                    g = this.index += 1;
                                    for (h = this.index + 4; this.index < h; this.index += 1) {
                                        e = b.charAt(this.index);
                                        if (!(e >= "0" && e <= "9" || e >= "a" && e <= "f" || e >= "A" && e <= "F")) throw SyntaxError("Invalid Unicode escape sequence in string.")
                                    }
                                    f += c("0x" + b.slice(g, this.index))
                                }
                            } else {
                                if (e == '"') break;
                                f += e, this.index += 1
                            }
                        }
                        if (b.charAt(this.index) == '"') return this.index += 1, f;
                        throw SyntaxError("Unterminated string.");
                    default:
                        g = this.index, e == "-" && (i = !0, e = b.charAt(this.index += 1));
                        if (e >= "0" && e <= "9") {
                            if (e == "0" && (e = b.charAt(this.index + 1), e >= "0" && e <= "9")) throw SyntaxError("Illegal octal literal.");
                            i = !1;
                            for (; this.index < d && (e = b.charAt(this.index), e >= "0" && e <= "9"); this.index += 1);
                            if (b.charAt(this.index) == ".") {
                                h = this.index += 1;
                                for (; h < d && (e = b.charAt(h), e >= "0" && e <= "9"); h += 1);
                                if (h == this.index) throw SyntaxError("Illegal trailing decimal.");
                                this.index = h
                            }
                            e = b.charAt(this.index);
                            if (e == "e" || e == "E") {
                                e = b.charAt(this.index += 1);
                                if (e == "+" || e == "-") this.index += 1;
                                for (h = this.index; h < d && (e = b.charAt(h), e >= "0" && e <= "9"); h += 1);
                                if (h == this.index) throw SyntaxError("Illegal empty exponent.");
                                this.index = h
                            }
                            return +b.slice(g, this.index)
                        }
                        if (i) throw SyntaxError("Unexpected `-`.");
                        if (e == "t" && b.slice(this.index, this.index + 4) == "true") return this.index += 4, !0;
                        if (e == "f" && b.slice(this.index, this.index + 5) == "false") return this.index += 5, !1;
                        if (e == "n" && b.slice(this.index, this.index + 4) == "null") return this.index += 4, null;
                        throw SyntaxError("Unrecognized token.")
                    }
                }
                return "$"
            }

            function g(a) {
                var b, c, d;
                if (a == "$") throw SyntaxError("Unexpected end-of-file.");
                if (typeof a == "string") {
                    if (a.charAt(0) == "@") return a.slice(1);
                    switch (a) {
                    case "[":
                        b = [];
                        for (;; c || (c = !0)) {
                            a = this.lex();
                            if (a == "]") break;
                            if (c) {
                                if (a != ",") throw SyntaxError("A comma (`,`) must separate the previous array element from the next.");
                                a = this.lex();
                                if (a == "]") throw SyntaxError("Unexpected trailing `,` in array literal.")
                            }
                            if (a == ",") throw SyntaxError("Unexpected `,` in array literal.");
                            b.push(this.get(a))
                        }
                        return b;
                    case "{":
                        b = {};
                        for (;; c || (c = !0)) {
                            a = this.lex();
                            if (a == "}") break;
                            if (c) {
                                if (a != ",") throw SyntaxError("A comma (`,`) must separate the previous object member from the next.");
                                a = this.lex();
                                if (a == "}") throw SyntaxError("Unexpected trailing `,`. in object literal.")
                            }
                            if (a == ",") throw SyntaxError("Unexpected `,` in object literal.");
                            if (typeof a != "string" || a.charAt(0) != "@") throw SyntaxError("Object property names must be double-quoted strings.");
                            if (this.lex() != ":") throw SyntaxError("A single colon (`:`) must separate each object property name from the value.");
                            b[a.slice(1)] = this.get(this.lex())
                        }
                        return b
                    }
                    throw SyntaxError("Expected `[` or `{`.")
                }
                return a
            }

            function h(a, c, e) {
                var f = a[c],
                    g, i;
                if (typeof f == "object" && f)
                    if (b.call(f) == "[object Array]")
                        for (g = f.length; g--;) i = h(f, g, e), i === void 0 ? f.splice(g, 1) : f[g] = i;
                    else d(f, function (a) {
                        var b = h(f, a, e);
                        b === void 0 ? delete f[a] : f[a] = b
                    });
                return e.call(a, c, f)
            }

            function i(a, c) {
                var d = new e("" + a),
                    f = d.get(d.lex());
                if (d.lex() != "$") throw SyntaxError("Expected end-of-file.");
                return c && b.call(c) == "[object Function]" ? h({
                    $: f
                }, "$", c) : f
            }
            var a = {
                    "\\": "\\",
                    '"': '"',
                    "/": "/",
                    b: "\b",
                    t: " ",
                    n: "\n",
                    f: "\f",
                    r: "\r"
                },
                c = "".constructor.fromCharCode;
            return e.prototype.lex = f, e.prototype.get = g, i
        }()), a
})

Tidak ada komentar

Comment Form

Posting Komentar

  1. Untuk menyisipkan sebuah link atau tautan gunakan <i rel="link=//example.com">teks disini</i>
    • Tanpa menggunakan https: dan http:
  2. Untuk menyisipkan sebuah kode yang pendek gunakan <i rel="code">kode disini</i>
  3. Untuk menyisipkan sebuah kode yang panjang gunakan <i rel="pre">kode disini</i>
  4. Untuk menyisipkan sebuah teks Tebal gunakan <strong>teks tebal disini</strong>
  5. Untuk menyisipkan sebuah teks Miring gunakan <em>teks miring disini</em>
  6. Untuk menyisipkan sebuah gambar gunakan <i rel="image">url gambar disini</i>

Ketentuan Komentar

  • Pengguna yang dapat berkomentar adalah pengguna yang memiliki akun google
  • Guna mengurangi komentar yang bersifat spam, maka akan diberlakukan langkah verifikasi kata.
  • Pengguna bertanggung jawab atas komentar yang dikirim
  • Admin dan penulis blog mempunyai hak untuk menampilkan, menghapus, menandai spam, pada komentar yang dikirim
  • Dengan mengirimkan sebuah komentar, maka pengguna dianggap menyetujui semua ketentuan diatas

Poin ketentuan diatas tidak bersifat tetap, dan dapat berubah kapan saja

Konversi Kode
Kode yang ingin dikonversi

Loading.....
X
Run
Klik tombol Run, untuk menampilkan hasil editing, atau menyegarkan editor.