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

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>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JSON.parse(JSON.stringify(obj))是一种将JavaScript对象转换为JSON字符串再转回JavaScript对象的常见方法。在这个过程中,JSON.stringify()方法将JavaScript对象转换为JSON字符串,而JSON.parse()方法则将JSON字符串转换回JavaScript对象。 这种方法的主要用途是在JavaScript中对对象进行深拷贝。通过先将对象转换为JSON字符串,然后再将其转换回对象,可以创建一个原始对象的副本,而不是只是引用原始对象。 例如,假设我们有一个包含复杂嵌套结构的JavaScript对象obj,我们想要创建它的副本。我们可以使用JSON.parse(JSON.stringify(obj))来实现这一目标。 这种方法的好处是它可以处理几乎所有类型的JavaScript对象,包括数组、函数和日期对象等。 但需要注意的是,JSON.stringify()方法会忽略对象的某些属性,例如函数和原型链上的属性。因此,通过JSON.parse(JSON.stringify(obj))进行深拷贝时,可能会丢失一些对象的特定行为。 此外,在使用JSON.parse()和JSON.stringify()方法时,需要确保处理的对象是有效的JSON格式。如果对象中包含不支持的数据类型或循环引用,这些方法可能会导致错误。 总结起来,JSON.parse(JSON.stringify(obj))是一种将JavaScript对象转换为JSON字符串再转回JavaScript对象的方法,用于实现对象的深拷贝。但需要注意处理的对象应为有效的JSON格式,并且一些特定类型的属性可能会丢失。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [了解 JSON.parse() 和 JSON.stringify()](https://blog.csdn.net/allway2/article/details/123856863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法](https://download.csdn.net/download/weixin_38743391/13002642)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值