JSON 序列化和反序列化你真的会了吗?

本文详细介绍了JavaScript中JSON.parse的基本用法,带reviver参数的应用,以及如何通过replacer过滤属性。同时,讲解了JSON.stringify的用法,包括replacer函数、数组选择和美化输出格式,以及toJSON方法在序列化中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

- 我们在开发过程中使用序列化的场景大部分都是对象的拷贝,或者传给后端JOSN数据等。
本篇文章会让你更加的深入理解序列化,玩出一些更高级的写法。

JSON.parse()

  • 将JSON 字符串构造成 js 对象

1、基础用法

const str = '{"name":"ajin","age":18,"sex":"男","hobby":"learn"}'
JSON.parse(str)
// 得到结果
{
	"name":"ajin",
	"age":18,
	"sex":"男",
	"hobby":"learn"
}

2、带reviver参数,为JSON.parse的第二个参数(可选)

const str = '{"name":"ajin","age":18,"sex":"男","hobby":"learn"}'

/** key: JSON 字符串的key, value: JSON字符串的值 */
const reviverAction = (key, value) => {
	console.log(key, value)
}
JSON.parse(str, reviverAction)

在这里插入图片描述
3、通过第二个参数实现属性过滤

const str = '{"name":"ajin","age":18,"sex":"男","hobby":"learn"}'

const reviverAction = (key, value) => {
	if(key === 'name') {
		return undefined
	}
	return value
	
}
const obj = JSON.parse(str, reviverAction)
console.log(obj)

在这里插入图片描述

  • 当reviver函数返回undefined 时,该对象属性就会被过滤。

JSON.stringify()

1、基础用法

const obj = {
	name: 'ajin',
	age: '18',
	sex: '男',
}
console.log(JSON.stringify(obj))
// '{"name":"ajin","age":"18","sex":"男"}'

2、第二个参数(replacer, [])的用法

// 当第二个参数为函数的时候,过滤数据
const obj = {
	name: 'ajin',
	age: '18',
	sex: '男',
}
const strObj = JSON.stringify(obj, (key, value) =>{
   if(typeof value === 'number') {
     return undefined
   }
   return value
})
// 打印结果:{"name":"ajin","sex":"男"}

// 第二个参数为数组时候[]
const strObj1 = JSON.stringify(obj, ['name', 'sex'])
// 打印结果:{"name":"ajin","sex":"男"}
  • replacer 函数也起到一个过滤属性的作用,返回undefined。则值被过滤掉
  • [] 数组里面的属性就是要被返回的属性。没有在数组里面的属性则被过滤掉

3、第三个参数 space 美化输出格式

const obj = {
	name: 'ajin',
	age: '18',
	sex: '男',
}
JSON.stringify(obj, ['name', 'sex'], '\t')

在这里插入图片描述

  • 插入制表符 ‘\t’ 后,输出格式得到了换行

toJSON 方法

const obj = {
  name: 'ajin',
  age: 18,
  sex: '男',
  idCard: '191010101',
  toJSON() {
    return {
      name: 'ajin',
      sex: '男',
    }
  }
}
const strObj = JSON.stringify(obj)
// 输出结果:'{"name":"ajin","sex":"男"}'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值