自定义 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;
                })();
            }
时间: 2024-10-14 14:23:56

自定义 JSON 对象的相关文章

自定义组装json对象

组装json对象 public string strTree(DataTable dt, string type, string state) { string strjosn = ""; foreach (DataRow dr in dt.Rows) { if (string.IsNullOrEmpty(strjosn)) { strjosn = "{\"id\":\"" + dr[1] + "\",\"

深入理解JSON对象

深入理解JSON对象 前面的话 json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据.2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式.本文将详细介绍关于json的内容 语法规则 JSON的语法可以表示以下三种类型的值 [1]简单值 简单值使用与JavaScript相同的语法,可以在JSON中表示字符串.数值.布尔值和null 字符串必须使用双引号

java对象与json对象间的相互转换

1.解析json字符串 将json字符串转换为json对象,然后再解析json对象:. JSONObjectjsonObject = JSONObject.fromObject(jsonStr); 根据json中的键得到它的值 Stringname = jsonObject.getString("name"); int age = jsonObject.getInt("age"); 2.将json字符串转换为java对象 同样先将json字符串转换为json对象,再

理解JSON对象

前面的话 json(javascript object notation)全称是javascript对象表示法,它是一种数据交换的文本格式,而不是一种编程语言,用于读取结构化数据.2001年由Douglas Crockford提出,目的是取代繁琐笨重的XML格式.本文将详细介绍JSON的相关内容 语法规则 JSON的语法可以表示以下三种类型的值 [1]简单值 简单值使用与javascript相同的语法,可以在JSON中表示字符串.数值.布尔值和null 字符串必须使用双引号表示,不能使用单引号.

将json对象数据保存到数据库对应的表中

问题描述  如何将json对象数据保存到数据库对应的表中. 分析问题   json数据内容不固定,json数据格式是固定的(name:value),数据库表结构是固定的,在json数据格式 与 数据库表结构之间建立一套对应规则,写一套逻辑解析这套对应规则. 1.json对象对应的数据库表需要确定. 2.json对象的节点对应数据库表的列需要确定. 3.json对象的value类型需要确定下来,才能对value值做相应的操作. 4.数据库表的主键列比较特殊,一般是自增长列,需要确定. 5.数据库记

IOS调用WCF提供的服务方法,但是方法的参数是WCF那边自定义的对象,这样有办法调用么,如果可以IOS应该怎么传参呢?请问有了解的么,

最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想到其中碰到不少问题,在网上搜索很久一直没有想到的解决方案,最后实现对数据流的分段写入然后后端再来解析流实现的此功能:后端运用WCF中的REST来接收数据:REST还是比较简单的知识,若是不懂可以简单网上了解一下:下面我们先了解一些本次运用到的理论知识: 一:理论知识 由于低层协议特性限制,WCF的流模式只支持如下四种:1:BasicHttpBi

JSON对象的解析,JSON.stringify()/JSON.parse()的用法

ECMAScript 5 对解析 JSON 的行为进行规范,定义了全局对象 JSON .支持这个对象的浏览器有 IE 8+.Firefox 3.5+.Safari 4+.Chrome 和Opera 10.5+. JSON 对象有两个方法: stringify() 和 parse() 用法如下: JSON.stringify()的用法/参数介绍 1.JSON.stringify(jsonObj),jsonObj为JSON数据,该方法是将JSON格式的数据,序列化成字符串类型 var bigWeb=

利用JavaScriptSerializer类 进行Json对象的序列化和反序列化和过滤

项目下载:JavaScriptSerializer_对JSON对象序列化与反序列化及过滤器 利用<JavascriptSerializer类> 进行Json对象的序列化和反序列化 1. 首先, JavascriptSerializer类所在名空间: using System.Web.Script.Serialization; 2. 相关的3篇文章, 标记下: 使用JavaScriptSerializer进行JSON序列化 注意:    是复杂对象. JSON是Javascript中常用的数据格

java对象与json对象之间的转换

jar包:import net.sf.json.JSONObject; 1.解析json字符串 将json字符串转换为json对象,然后再解析json对象:.JSONObjectjsonObject = JSONObject.fromObject(jsonStr); 根据json中的键得到它的值Stringname = jsonObject.getString("name");int age = jsonObject.getInt("age"); 2.将json字符