一般大家使用JSON.stringfy()只用到了第一个参数,把对象转成json格式
但是JSON.stringfy()还有后面的两个参数:JSON.stringfy(value, replacer, space)
value:要转化的对象
replacer:传函数-->被序列化的值的每个属性都会经过该函数的转换和处理
传数组-->在这个数组中的属性名才会被序列化到最终的 JSON 字符串中
传null或者不传-->对象所有的属性都会被序列化
var obj = { name: "lili", money: 17025, sex: "女" } // 不转money值,并且在sex值加上“性别”二字 JSON.stringify(obj,(key,value) => { if (key === "money") { return undefined; } if (key === "sex") { return "性别:"+value } return value }) // '{"name":"lili","sex":"性别:女"}'
space:传数字-->则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多 10 个空格)
传字符串-->则每一级别会比上一级别多缩进该字符串(或该字符串的前 10 个字符)
toJSON方法:
如果要转化的对象拥有 toJSON 方法,那么toJSON方法就会覆盖该对象默认的序列化行为:不是该对象被序列化,而是调用 toJSON方法后的返回值会被序列化
直接看例子吧:
var obj = { name: 'lili', toJSON: function () { return 'lalala'; } }; JSON.stringify(obj); // '"lalala"' JSON.stringify({test: obj}); // '{"test":"lalala"}'