关于JSON.stringify函数,应该都知道其最初的含义,JSON.stringify(obj)把对象转化为JSON字符串,当然,在低版本浏览器中需要引入JSON2.js插件才能正常使用。但是,JSON.stringify仅仅就这一个用处么?显然不止。它还有第二个、第三个参数。了解这三个用处将对学习JSON 大有用处。
JSON.stringify的第二个参数可以是一个数组,也可以是一个function。
对象或者说JSON字符串都可以看成是由多个key-value键值对组成,而第二个参数为数组的时候过滤掉所有key不在数组中的键值对。例如:
可以看到,键名不为a或者b的全部被过滤掉了。OK,例子看懂了,那这特性有什么用呢?
经常我们会有这种需求,对于下面数组,不显示其年龄(age)属性。
一般或许会采用循环排出,或者数组的map等遍历从新生成,但是有JSON.stringify就简单多了。先转成JSON字符串同时过滤掉age,再还原成数组对象。
OK,简简单单一句话,搞定。
当然,第二个参数也可以是一个Function,其有两个参数,当前遍历的key和value,如果没有返回值则过滤掉当前key值①,否则当前遍历的key值对应的value值为返回值②。
如上屏蔽age一例,如果用function的方式则可以这样写:
可以看到结果和上面一样,当然,这里只是JSON字符串,需要再次parse转化为对象形式。当然这里只用到function的第①点,还有另一个作用,改变其value值。如上同一个users对象,我们需要把sex的0和1分别改变成男和女。
第三个参数主要作为一个格式化参数。如下对象:
假如我们用alert调试,会发现alert(test);为一个'[object Object]’根本看不到值。但是我们用alert(JSON.stringify(test));,可以看到其值但是完全没有格式,第三个参数就是这里的格式化补齐的符号。
如果是数字则表示缩进量:
如果是字符则表示填充字符,当然同样会以第一层 1个,第二层2个。。。依次填充:
可以看到,第二层的对象是填充的两个*,So,我们同样可以通过填充\t来进行代码缩进,当然,数字写上去速度快多了。
原文来自:代码山