zoukankan      html  css  js  c++  java
  • 自定义 JSON 对象

    针对 IE9 以下不支持 JSON 对象的处理方式,网上大部分自定义的方式无形之中都会将中文转码为 Unicode 编码格式的字符换,但是在浏览器中我们有无法察觉到(浏览器自己解析成 UTF8 了),到后台服务器将非常难处理这种字符串,在 github 上找到了 json.js ,非常不错,但不是很完美,对于特殊符号单斜线、单引号、双引号等转换有些小问题(不能转换的原因可能是我没有完全测试到位),最后自己动手解决了,把下面的代码复制到文件,另存为js中直接引用就行了。

    1、优点: 除中文外的字符都会转为 Unicode 。

    2、缺点:JSON.parse() 使用 eval 进行转换的,这个方法不是很安全,还看到人介绍用 new Function ,但是没有测试,这里暂时标记下,有空测试下。

     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-u001fu007f-u009fu00adu0600-u0604u070fu17b4u17b5u200c-u200fu2028-u202fu2060-u206fufeffufff0-uffff]', "g");
                        JSON.meta = {
                            "": "\b",
                            "    ": "\t",
                            "
    ": "\n",
                            "f": "\f",
                            "
    ": "\r",
                            '"': '\"',
                            "''": "\''",
                            "\": "\\"
                        };
                        return JSON;
                    })();
                }
  • 相关阅读:
    Autotools使用流程【转】
    Linux下GCC生成和使用静态库和动态库【转】
    Linux驱动模块的Makefile分析【转】
    GNU C 中零长度的数组【转】
    Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】
    程序(进程)内存分布解析【转】
    【转】用户空间使用i2c_dev--不错
    开源课堂网址
    【转】用Device tree overlay掌控Beaglebone Black的硬件资源
    【转】Device Tree(三):代码分析
  • 原文地址:https://www.cnblogs.com/yuhongda0315/p/5256928.html
Copyright © 2011-2022 走看看