JSON.stringify的第三个参数
var jsonObj = [
{
name: '张三',
age: 20,
sex: '男',
arr: {
name: '小明',
age: 100,
sex: '女'
}
},
{
name: '李四',
age: 33,
sex: '男'
},
{
name: '王无',
age: 18,
sex: '男'
}
]
var res1 = JSON.stringify(jsonObj);
var res2 = JSON.stringify(jsonObj, null, 2)
console.log(res1);
console.log(res2);
// 输出结果见下图
// 第三个参数2, 也可以是任意的一个数值,如果JSON.stringify只传第一个参数,则会将json格式的数据转换成字符串(res1),但是是无序的,很混乱。如果需要让我们看起来方便,只需将第三个参数设置为任意的一个数字,如果为0则还是混乱的状态。本身第三个参数的含义表示的是 设置每一个字符串 之间的间距。
JSON.stringify的第二个参数,如果是一个 函数
var jsonObj = [
{
name: '张三',
age: 20,
sex: '男',
arr: {
name: '小明',
age: 100,
sex: '女'
}
},
{
name: '李四',
age: 33,
sex: '男'
},
{
name: '王无',
age: 18,
sex: '男'
}
]
// 第二个参数如果是一个函数的话,该函数会进行遍历,且是递归的
var res3 = JSON.stringify(jsonObj, (key, value) => {
// key表示的每一个对象中的属性名
// value表示的每一个属性名对应的属性值
// 如果我们需要对返回的 JSOn格式 的数据做出一些 处理 ,则可以这样写
if( key == 'age'){ // 此时会对每一个对象中的age属性做出处理
if (value > 10 && value < 50 ) { // 此处的value对应的是age的属性值
// 此处return出去的是每一个对象修改属性值之后变成的 ‘新’ 的对象
return '我是一个新的age'; // 如果age的属性值符合条件,则会使用return出去的这个值来代替
}
return value; // 此处一定要return才行,这里return的是数据改变之后的jsonObj的值
}
},1) // 此处使用第三个参数只是为了让打印出来的数据方便查看,格式化一下数据
console.log(res3)// 打印结果见res1_2
如果JSON.stringify的第二个参数是一个 数组
var jsonObj = [
{
name: '张三',
age: 20,
sex: '男',
arr: {
name: '小明',
age: 100,
sex: '女'
}
},
{
name: '李四',
age: 33,
sex: '男'
},
{
name: '王无',
age: 18,
sex: '男'
}
]
// 如果第二个参数是一个数组,那么只保留该数组中对应的属性名和属性值
var res4 = JSON.stringfiy(jsonObj, ['name'],1)
console.log(res4); //输出结果见res1_3