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

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

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

  1. if (!window["JSON"]) {
  2. window["JSON"] = (function () {
  3. function JSON() {
  4. }
  5. JSON.parse = function (sJSON) {
  6. return eval('(' + sJSON + ')');
  7. };
  8. JSON.stringify = function (value) {
  9. return this.str("", { "": value });
  10. };
  11. JSON.str = function (key, holder) {
  12. var i, k, v, length, mind = "", partial, value = holder[key], me = this;
  13. if (value && typeof value === "object" && typeof value.toJSON === "function") {
  14. value = value.toJSON(key);
  15. }
  16. switch (typeof value) {
  17. case "string":
  18. return me.quote(value);
  19. case "number":
  20. return isFinite(value) ? String(value) : "null";
  21. case "boolean":
  22. case "null":
  23. return String(value);
  24. case "object":
  25. if (!value) {
  26. return "null";
  27. }
  28. partial = [];
  29. if (Object.prototype.toString.apply(value) === "[object Array]") {
  30. length = value.length;
  31. for (i = 0; i < length; i += 1) {
  32. partial[i] = me.str(i, value) || "null";
  33. }
  34. v = partial.length === 0 ? "[]" : "[" + partial.join(",") + "]";
  35. return v;
  36. }
  37. for (k in value) {
  38. if (Object.prototype.hasOwnProperty.call(value, k)) {
  39. v = me.str(k, value);
  40. if (v) {
  41. partial.push(me.quote(k) + ":" + v);
  42. }
  43. }
  44. }
  45. v = partial.length === 0 ? "{}" : "{" + partial.join(",") + "}";
  46. return v;
  47. }
  48. };
  49. JSON.quote = function (string) {
  50. var me = this;
  51. me.rx_escapable.lastIndex = 0;
  52. return me.rx_escapable.test(string) ? '"' + string.replace(me.rx_escapable, function (a) {
  53. var c = me.meta[a];
  54. return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
  55. }) + '"' : '"' + string + '"';
  56. };
  57. 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");
  58. JSON.meta = {
  59. "\b": "\\b",
  60. " ": "\\t",
  61. "\n": "\\n",
  62. "\f": "\\f",
  63. "\r": "\\r",
  64. '"': '\\"',
  65. "''": "\\''",
  66. "\\": "\\\\"
  67. };
  68. return JSON;
  69. })();
  70. }

自定义 JSON 对象的更多相关文章

  1. js学习-自定义函数、对象的字面量、json对象学习小结

    一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...

  2. JSON对象(自定义对象)

    JSON对象(自定义对象) 1.什么是JSON对象 JSON对象是属性的无序集合,在内存中也表现为一段连续的内存地址(堆内存) 1)JSON对象是属性的集合 2)这个集合是没有任何顺序的 2.JSON ...

  3. Python: 自定义类对象序列化为Json串

    之前已经实现了Python: Json串反序列化为自定义类对象,这次来实现了Json的序列化. 测试代码和结果如下: import Json.JsonTool class Score: math = ...

  4. Python: Json串反序列化为自定义类对象

    最近刚接触到python,就想到了如何反序列化json串.网上找了一下,大部分都是用json模块反序列化为python数据结构(字典和列表).如果对json模块不了解的参考菜鸟教程.然后我在此基础上将 ...

  5. 自定义组装json对象

    组装json对象 public string strTree(DataTable dt, string type, string state) { string strjosn = "&qu ...

  6. JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  7. 深入理解JSON对象

    × 目录 [1]语法规则 [2]stringify [3]parse[4]eval 前面的话 json(javascript object notation)全称是javascript对象表示法,它是 ...

  8. MVC中处理Json和JS中处理Json对象

    MVC中处理Json和JS中处理Json对象 ASP.NET MVC 很好的封装了Json,本文介绍MVC中处理Json和JS中处理Json对象,并提供详细的示例代码供参考. MVC中已经很好的封装了 ...

  9. MVC中用ajax提交json对象数组

    应用场景:在前端用ajax向服务器提交json对象数组,在controller的以对象数组作为函数的参数,提交的json数组直接转为服务器端的对象数组. 如: 要将json对象数组[{Id:1,Nam ...

随机推荐

  1. centos使用yum安装软件的时候出现了undefined symbol: CRYPTO_set_locking_callback

    1.问题 在CentOS下使用yum安装软件,结果出现了下面的错误提示: # yum installThere was a problem importing one of the Python mo ...

  2. UVA 10791 Minimum Sum LCM(分解质因数)

    最大公倍数的最小和 题意: 给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 那么找出一个序列,使他们的和最小. 分析: 一系列数字a1,a2,a3 ...

  3. Hibernate加载数据失败failed to lazily initialize a collection of role

    在测试获取数据库中的数据或者在页面获取时,有时会遇到这样的错误提示: failed to lazily initialize a collection of role: com.exam.entity ...

  4. osip2 代码分析

    主要类型定义: 1.osip_t /** * Structure for osip handling. * In order to use osip, you have to manage at le ...

  5. DS实验题 融合软泥怪-1

    题目 思路 很容易想到第一种做法,用Huffman算法,从森林中找出两个值最小的节点,合并再加入森林,在这个过程中不断记录. 但是每一次需要sort一遍,将最小的两个值节点置于头两个节点,最坏情况下复 ...

  6. openstack-keystone

    preparation: config: /etc/keystone/keystone.conf log: /var/log/keystone.log 1. change log level: vi ...

  7. Composer 学习笔记

    Composer 是 PHP 的一个依赖管理工具(据说是最优秀的).它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.目前很多项目以Composer 作为依赖管理工具,目前正在学习yii2 ...

  8. Blog 公用部分结构与class定义

    /*博客文章公用部分class与结构 common*/ /* 1.title-block //标题块 ├── border-danger //危险红 ├── border-info //普通蓝 └── ...

  9. 使用git@osc管理现有项目

    首先安装git和powershell集成git工具 参考 http://www.cnblogs.com/kreo/p/4685988.html 打开windows powershell,进入项目目录, ...

  10. java 关键字查询时的转义操作

    /** * mysql模糊查询时,如果查询关键字本身包含_和%,需要转义 * * @param queryKey 查询关键字 * @return 转义字符 */ private String conv ...