JS实现JSON.stringify的实例代码讲解


Posted in Javascript onFebruary 07, 2017

 JSON.stringify是浏览器高版本带的一个将JS的Objtect对象转换为JSON字符串的一个方法,不过再IE6下面,并不存在JSON这一对象,因此,用到此方法时,需要写一套兼容性的代码。 JSON.stringify的一些规则以及注意点:当对象为数字,null,boolean的时候,直接转换为相应的字符串就可以了。 但是string,function,undefined,object,array等,需要特殊处理。

1.undefined,该类型使用JSON.stringify处理的时候,如果对象就是undefined,将会输出"undefined",如果对象是数组的元素,那么将会变成null,比如:[undefined],stringify之后变成了"[null]";如果该对象是object的元素,那么该属性将当作不存在,不输出,比如{a:1,b:undefined},stringify之后是"{\"a\":1},B属性直接抛弃。

2.字符串在拼接的时候需要把内部的双引号处理掉

代码如下

/** 
 * JSON stringify的实现 
 * @author norkts<norkts@gmail.com> 
 * @version 1.0 2015-11-24 15:11 实现了基本功能 
 * @version 1.1 2015-11-24 15:19 norkts 增加了JSON.stringify的兼用代码实现 
 * @version 1.2 2015-11-24 15:49 norkts 修改数组indexOf在IE下不兼容的写法,修改了undefined值的特殊处理 
 */ 
(function(NS){ 
 
 //简单类型 
 var simpleTypes = ["number", "boolean", "undefined", "string", "function"]; 
  
 //JSON.stringify的主函数 
 function stringify(object){ 
  var type = typeof object; 
   
  //如果是简单类型,则直接返回简单类型的结果 
  if(indexOf(simpleTypes, type) > -1){ 
   return parseSimpleObject(object); 
  } 
 
  //数组对象的 
  if(object instanceof Array){ 
   var len = object.length; 
   var resArr = []; 
   for(var i = 0; i < len; i++){ 
    var itemType = typeof object[i]; 
    if(indexOf(simpleTypes, itemType) > -1){ 
 
     //undefined特殊处理,数组中变成null 
     if(itemType != "undefined"){ 
      resArr.push(parseSimpleObject(object[i])); 
     }else{ 
      resArr.push("null"); 
     } 
      
    }else{ 
     //递归处理JS数组中的复杂元素 
     resArr.push(stringify(object[i])); 
    } 
   } 
    
   return "[" + resArr.join(",") + "]"; 
  } 
   
  //普通object对象 
  if(object instanceof Object){ 
   if(object == null){ 
    return "null"; 
   } 
    
   var resArr = []; 
    
   for(var name in object){ 
    var itemType = typeof object[name]; 
    if(indexOf(simpleTypes, itemType) > -1){ 
     //undefined特殊处理,object中不编码 
     if(itemType != "undefined"){ 
      resArr.push("\"" + name + "\":" + parseSimpleObject(object[name]));  
     } 
    }else{ 
     resArr.push("\"" + name + "\":" + stringify(object[name])); 
    } 
   } 
    
   return "{" + resArr.join(",") + "}"; 
  } 
 } 
  
 function parseSimpleObject(object){ 
  var type = typeof object; 
  if(type == "string" || type == "function"){ 
   return "\"" + object.toString().replace("\"", "\\\"") + "\""; 
  } 
   
  if(type == "number" || type == "boolean"){ 
   return object.toString(); 
  } 
   
  if(type == "undefined"){ 
   return "undefined"; 
  } 
   
  return "\"" + object.toString().replace("\"", "\\\"") + "\""; 
 } 
  
 function indexOf(arr, val){ 
  for(var i = 0; i < arr.length; i++){ 
   if(arr[i] === val){ 
    return i; 
   } 
  } 
   
  return -1; 
 } 
  
 /** 
  * 将stringify做二次封装 
  * @param object 要处理的对象 
  * 
  */ 
 NS.stringify = function(object, isEncodeZh){ 
  var res = stringify(object); 
  if(isEncodeZh){ 
   var encodeRes = ""; 
   for(var i = 0; i < res.length; i++){ 
    if(res.charCodeAt(i) < 0xff){ 
     encodeRes += res[i]; 
    }else{ 
     encodeRes += "\\u" + res.charCodeAt(i).toString(16); 
    } 
   } 
   res = encodeRes; 
  } 
   
  return res; 
 }; 
})(window);

以上所述是小编给大家介绍的JS实现JSON.stringify的实例代码讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
jQuery实现的纵向下拉菜单实例详解【附demo源码下载】
Jul 09 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
Sep 04 Javascript
用js实现博客打赏功能
Oct 24 Javascript
jquery实时获取时间的简单实例
Jan 26 Javascript
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
JS简单验证上传文件类型的方法
Apr 17 Javascript
JS实现电话号码的字母组合算法示例
Feb 26 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
Java 生成随机字符的示例代码
Jan 13 Javascript
jQuery简单获取DIV和A标签元素位置的方法
Feb 07 #Javascript
JS日程管理插件FullCalendar简单实例
Feb 07 #Javascript
纯js三维数组实现三级联动效果
Feb 07 #Javascript
在点击div中的p时,如何阻止事件冒泡
Feb 07 #Javascript
bootstrap vue.js实现tab效果
Feb 07 #Javascript
Node连接mysql数据库方法介绍
Feb 07 #Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 #Javascript
You might like
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
php mail to 配置详解
2014/01/16 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
盘点PHP和ASP.NET的10大对比!
2015/12/24 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
php获取网站根目录物理路径的几种方法(推荐)
2017/03/04 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
JS hashMap实例详解
2016/05/26 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
谈谈JavaScript中的垃圾回收机制
2020/09/17 Javascript
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
python3 实现调用串口功能
2019/12/26 Python
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
员工合理化建议书
2014/05/19 职场文书
作风建设演讲稿
2014/05/23 职场文书
英语教学课后反思
2016/02/15 职场文书
晚会开幕词范文
2016/03/04 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书