JSONと互換性のあるSDK

JSONと互換性のあるSDK

最近RongyunSDKを統合していたので、RongyunのSDKソースコードを調べたところ、JSON適応のソースコードのセクションがあることがわかりました。JSONオブジェクトの処理方法はIE9でサポートされていないため、ここで共有してください。

1.利点:中国語を除くすべての文字がUnicodeに変換されます。

2.デメリット:JSON.parse()は変換にevalを使用します。このメソッドは安全ではありません。新しい関数が導入されるのも見ましたが、テストはありません。とりあえずここにマークを付けます。テストする時間があります。

if (!window["JSON"]) {
window["JSON"] = (function () {
    function JSON() {
    }
    JSON.parse = function (sJSON) {
        return eval('(' + sJSON + ')');
    };
    JSON.stringify = function (value) {
        return this.str("", { "": value });
    };
    JSON.str = function (key, holder) {
        var i, k, v, length, mind = "", partial, value = holder[key], me = this;
        if (value && typeof value === "object" && typeof value.toJSON === "function") {
            value = value.toJSON(key);
        }
        switch (typeof value) {
            case "string":
                return me.quote(value);
            case "number":
                return isFinite(value) ? String(value) : "null";
            case "boolean":
            case "null":
                return String(value);
            case "object":
                if (!value) {
                    return "null";
                }
                partial = [];
                if (Object.prototype.toString.apply(value) === "[object Array]") {
                    length = value.length;
                    for (i = 0; i < length; i += 1) {
                        partial[i] = me.str(i, value) || "null";
                    }
                    v = partial.length === 0 ? "[]" : "[" + partial.join(",") + "]";
                    return v;
                }
                for (k in value) {
                    if (Object.prototype.hasOwnProperty.call(value, k)) {
                        v = me.str(k, value);
                        if (v) {
                            partial.push(me.quote(k) + ":" + v);
                        }
                    }
                }
                v = partial.length === 0 ? "{}" : "{" + partial.join(",") + "}";
                return v;
        }
    };
    JSON.quote = function (string) {
        var me = this;
        me.rx_escapable.lastIndex = 0;
        return me.rx_escapable.test(string) ? '"' + string.replace(me.rx_escapable, function (a) {
            var c = me.meta[a];
            return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
        }) + '"' : '"' + string + '"';
    };
    JSON.rx_escapable = new RegExp('[\\\"\\\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]', "g");
    JSON.meta = {
        "\b": "\\b",
        "    ": "\\t",
        "\n": "\\n",
        "\f": "\\f",
        "\r": "\\r",
        '"': '\\"',
        "''": "\\''",
        "\\": "\\\\"
    };
    return JSON;
})();
}

このコードを見ると、Rongyun SDKはまだ互換性を処理しており、IE7でテストされており、安定して実行できると思います(IE7はまだありますが、すばらしいですか?)

Rongyun公式ウェブサイト:https://www.rongcloud.cn

Rongyunドキュメント:https://docs.rongcloud.cn/v4

おすすめ

転載: blog.51cto.com/14802850/2582431