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

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的实例代码讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2017-02-06

关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法

1. JSON.parse(jsonString): 在一个字符串中解析出JSON对象 var str = '[{"href":"baidu.com","text":"test","orgId":123,"dataType":"curry","activeClass":"haha"}]'; JSON.parse(str); 结果

谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)

在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法. JSON.stringify(obj)将JSON转为字符串.JSON.parse(string)将字符串转为JSON格式: var a={"name":"tom","sex":"男","age":"24"}; var aToStr =

js解析与序列化json数据(一)json.stringify()的基本用法

早期的JSON解析器基本上就是使用JavaScript的eval()函数.由于JSON是JavaScript语法的自己,因此eval()函数可以解析.解释并返回JavaScript的对象和数组. ECMAScript 5对解析JSON的行为进行了规范,定义了全局对象JSON. JSON对象有两个方法:stringify()和parse().在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript.例如: 新建一个HTML

JSON.parse()和JSON.stringify()使用介绍

parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":"23"}' 结果: JSON.parse(str) Object age: "23" name: "huangxiaojian" __proto__: Object 注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常. stringify(

JSON.stringify 语法实例讲解

认识javascript也不短的时间了,可是这个用法说实在的,我还是第一次见过,惭愧啊惭愧啊.于是乎,在网上找了写资料,写了些例子 希望能给园子们一些帮助. 作用:这个函数的作用主要是为了系列化对象的. 可能有些人对系列化这个词过敏,我的理解很简单.就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的).就这么简单.打个比方说,你有一个类,那么你可以通过这个方法转换成相应的json类型的.很简单吧. 接着看. 语法: JSON.stringify(value [, repla

深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解

"JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使JSON成为理想的数据交换语言,作用是易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)." 今天在这里笔者想简单谈谈jquery里面的JSON.parse()和JSON.stringify()函数,顺便还会提一下原生JS里面的eval()函数 (1)JSO

JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析

本文实例讲述了JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能.分享给大家供大家参考,具体如下: 根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字符串会新辟一个新的存储地址,这样就切断了引用对象的指针联系. 测试例子: var test={ a:"ss", b:"dd", c:[ {dd:"css",ee:"cdd"}, {mm:"ff",nn:

Android通过json向MySQL中读写数据的方法详解【读取篇】

本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private void parseJsonMulti(String strResult) { try { Log.v("strResult11","strResult11="+strResult); int index=strResult.indexOf("[");

Android通过json向MySQL中读写数据的方法详解【写入篇】

本文实例讲述了Android通过json向MySQL中写入数据的方法.分享给大家供大家参考,具体如下: 先说一下如何通过json将Android程序中的数据上传到MySQL中: 首先定义一个类JSONParser.Java类,将json上传数据的方法封装好,可以直接在主程序中调用该类,代码如下 public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String j

java json不生成null或者空字符串属性(详解)

大家平时用java对象转json字符串.null或者空字符串属性是不需要生成到json字符串里面的. 如下方式生成,没有使用的属性也会生成json字符串属性. JSONArray jsonarray = JSONArray.fromObject(ecmMessageMap.values()); msgObj = jsonarray.toString(); {"actionType":"","clientIp":"","

把JSON数据格式转换为Python的类对象方法详解(两种方法)

JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": "Tom", "Sex": "Male", "BloodType": "A", "Hobbies": ["篮球", "足球"]} 我需要把这个转换为具

package.json中homepage属性的作用详解

Package.json 属性说明 name - 包名. version - 包的版本号. description - 包的描述. homepage - 包的官网 url . author - 包的作者姓名. contributors - 包的其他贡献者姓名. dependencies - 依赖包列表.如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下. repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上.

JavaScript中eval()函数用法详解

eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执行 Javascript 语句. 语法 复制代码 代码如下: eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eva

Java中JSON字符串与java对象的互换实例详解

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串 [