自定义 JSON 对象
Posted 单于墩子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义 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-\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; })(); }
以上是关于自定义 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章