java 对象转json 某属性不序列化_JSON序列化(stringify)对象时排除某些属性的两种方法...

JavaScript的JSON对象本身就带有序列化和反序列化的函数,为 parse 和 stringify,我们一般使用这两个函数将JSON对象持久化。

如:

var Persion = {

username: "Kris",

password: "1234567890"

}

alert(JSON.stringify(Persion))   //{"username":"Kris","password":"1234567890"}

美中不足的是stringify这个函数会把所有属性都进行转换,但有时侯我们希望排除一些属性,比如上面的 password。

用toJSON隐藏对象的某些属性

stackoverflow 上面的这篇问答提供了一种解决方案。即复写toJSON方法:

var Message = function() {

this.myPrivateProperty = "Secret message";

this.myPublicProperty = "Message for the public";

this.toJSON = function() {

return {

"public": this.myPublicProperty

};

};

}

alert(JSON.stringify(new Message()));    // {"public":"Message for the public"}

JSON在调用stringify时会先检测该对象的toJSON接口是否存在,如果存在则使用对象本身的toString进行序列化。复写toJSON不光可以应用在基于function构造的对象上,还可以应用在基于Object的对象上,如:

var Persion = {

name     : 'Kris'

, password : 1234567890

, toJSON   : function() { return { name: this.name } }

};

alert(JSON.stringify(Persion));    // {"name": "Kris"}

在Object上定义隐藏属性

复写toJSON需要实现额外一个接口,在ES5有一个defineProperty方法可以实现通过配置参数来定义一些特殊的属性,比如可以将此属性设置为不可枚举:

var Persion = { name: "Kris", password: "1234567890" }

//设置属性

Object.defineProperty(Persion, "password", { enumerable: false })

alert(Persion.password);           //1234567890

alert(JSON.stringify(Persion));    // {"name": "Kris"}

其实上defineProperty还有一些更高级的属性,如为属性添加get/set方法等,但因不兼容老版IE,因此在前端使用的并不多,多用于后端Node.JS中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值