来自JSON.stringify三个参数的一波解释

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 

猜你喜欢

转载自www.cnblogs.com/zzf-fly/p/12639860.html
今日推荐