你真的了解JSON.stringify() 吗???

介绍了JSON.stringify(value[, replacer [, space]])的三个参数。value是要序列化为JSON字符串的值;replacer可为函数、数组、null或不提供,作用不同;space用于指定缩进美化输出,可为数字、字符串、null或不提供。

JSON.stringify(value[, replacer [, space]])三个参数

  • value: 将要序列化成 一个JSON 字符串的值。
  • replacer: 如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为null或者未提供,则对象所有的属性都会被序列化;
  • space: 指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。该值若小于1,则意味着没有空格;如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;如果该参数没有提供(或者为null)将没有空格。
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>JSON.stringify()</title>
</head>
<body>
	<!--  -->
	<script>
		// 传一个对象,生成JSON字符串
		var obj= {name: 'robin', age: 24}
		console.log(JSON.stringify(obj)) // {"name":"robin","age":24}
		// 索引为字符串的数组是不可枚举的,在JSON中没有任何意义
		var arr = [1,2]
		console.log(arr) // [1, 2]
		arr['add'] = 3
		console.log(JSON.stringify(arr)) // [1,2]
		// 底层是toJSON方法
		console.log(JSON.stringify({x:1, y:2, toJSON(){return this.x+this.y}})) // 3
		// 如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为
		var und = {name: undefined, age: undefined, sleep: 22}
		console.log(JSON.stringify(und)) // {"sleep":22}
		// 过滤属性
		function replacer(key, value) {
			if(typeof value == 'string') {
				return undefined
			}
			return value
		}
		var foo = {foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7};
		console.log(JSON.stringify(foo, replacer)) // {"week":45,"month":7}
		// 过滤属性其他方法
		console.log(JSON.stringify(foo, ['model', 'transport'])) // {"model":"box","transport":"car"}
		// 第三参数space用来控制结果字符串里面的间距。如果是一个数字, 则在字符串化时每一级别会比上一级别缩进多这个数字值的空格(最多10个空格);如果是一个字符串,则每一级别会比上一级别多缩进用该字符串(或该字符串的前十个字符)。
		var data = {
		  name:"niuzai",
		  info:{
		    age:18,
		    sex:"male"
		  }
		};
		console.log(JSON.stringify(data, null, 2))
// 		{
	//   "name": "niuzai",
	//   "info": {
	//     "age": 18,
	//     "sex": "male"
	//   }
// }
		console.log(JSON.stringify(data, null, 'hello world')) 
		// {
		// hello worl"name": "niuzai",
		// hello worl"info": {
		// hello worlhello worl"age": 18,
		// hello worlhello worl"sex": "male"
		// hello worl}
		// }

		// toJSON
		var obj = {
		    data: 'data',
		    
		    toJSON(key){
		        if(key)
		            return `Now I am a nested object under key '${key}'`;
		        
		        else
		            return this;
		    }
		};

		console.log(JSON.stringify(obj)) // 如果该对象是属性值,则为属性名
		// '{"data":"data"}'  key

		console.log(JSON.stringify({ obj })) // 如果直接在该对象上调用JSON.stringify(),则为空字符串
		// '{"obj":"Now I am a nested object under key 'obj'"}'  key obj

		console.log(JSON.stringify([ obj ])) // 如果它在数组中,则数组中的索引作为字符串
		// '["Now I am a nested object under key '0'"]' key 0

		// 如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为:不是那个对象被序列化,而是调用 toJSON 方法后的返回值会被序列化,例如:
		var obj = {
		  foo: 'foo',
		  toJSON: function () {
		    return 'bar';
		  }
		};
		JSON.stringify(obj);      // '"bar"'
		JSON.stringify({x: obj}); // '{"x":"bar"}'

	</script>
	<script>
		$.each(data, function(index, item) {
			let obj = JSON.parse(JSON.stringify(item, ["CustomTableItemID", "Name", "StartDate", "EndDate"]), function(key, value) {
				if(key == "StartDate") {
					return dateFormat(Number(value), 'MMM DD, YYYY');
				}
				return value;
			} )
		});
	</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值