JSON.stringify几种可能的用法总结

JSON.Stringify的几种情况

情况1:含有toJSON方法的字符串,在调用stringify的时候调用toJSON方法

var obj={name:"xxx",sex:'female',toJSON:function(){return "xxx";}};
  console.log(JSON.stringify(obj));
这时候调用toJSON方法得到结果为"xxx"!这种方式在jQuery的源码中也用到了,主要用于防止外界调用stringify而暴露敏感信息:

if ( !cache[ id ] ) {
		// Avoid exposing jQuery metadata on plain JS objects when the object
		// is serialized using JSON.stringify
		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
	}
在这里主要是为了防止用户调用stringify而暴露数据仓库的内容(详见 jQuery源码分析之深入理解jQuery.data,jQuery._data以及data实例函数十八问)

情况2:toJSON如果第二个参数是数组,那么只是序列化数组里面的字段

var obj={name:"xxx",sex:'female'};
console.log(JSON.stringify(obj,["sex"]));//只是弹出"sex":"female"
情况3:如果stringify里面第二个参数是函数,传入的函数接受两个参数,属性名和属性值,属性名只能是字符串,同时如果值并非键值对的情况下,键名可以是空字符串

var book={
    title:"xxx",
    edition:4,
    year:2014
}
console.log(JSON.stringify(book,function(key,value)
{
//对key是year的字符串不进行序列化!
   if(key==="year")
  { 
    return undefined;//返回undefined表示属性忽略
  }  
  //其它的字段正常序列化,打印{"title":"xxx","edition":4}
   else
     {
          return value;
     }
}));
情况4:如果传入了第四个参数是数字那么表示缩进的空格个数(空格个数必须小于10,大于10都会自动缩小为10),如果是其它字符那么就在每一个键名前面添加指定的字符

var book={
    title:"xxx",
    edition:4,
    year:2014
}
console.log(JSON.stringify(book,null,"--"));
//"--"在JSON字符串中作为缩进字符,也就是每一个字段如"title/edition/year"前面添加"--"!
console.log(JSON.stringify(book,null,6));
//每一个前面添加6个空格

你可能感兴趣的:(前端开发,javascript)