OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

JSON序列化(stringify)对象时排除某些属性的两种方法


分享到
分类 JS学习   关键字 JavaScript   发布 kris  1432546469294
注意 转载须保留原文链接,译文链接,作者译者等信息。  
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中。

社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. NativeScript的竞争者React Native:又一个用JavaScript写原生iOS应用的项目
  2. 2015年度开发者调查:JS最流行;ObjC工资最高;最想学Android
  3. 基于JavaScript的DDoS首次通过安全的浏览器发动攻击(百度被劫持攻击Github的原理和过程)
  4. 编写高性能HTML网页应用
  5. WordPress 4.3核心功能将放弃PHP并使用Node.JS重写[4.1]
  6. JavaScript变量作用域(Variable Scope)和闭包(closure)的基础知识
  7. Image Lazy Load:那些延时加载图片的开源插件(jQuery)
  8. 几款开源的图形化Redis客户端管理软件
  9. 创建自定义的jQuery补间动画运动函数及其实现的数学原理
  10. Mozilla Firefox将停止支持不安全的HTTPS
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. JavaScript变量作用域(Variable Scope)和闭包(closure)的基础知识
  2. 用jQuery为跳转链接锚点添加平滑滚动动画效果(如回到顶部按钮)
  3. 用纯css改变下拉列表select框的默认样式
  4. Atom编辑器嵌入Node.JS引擎实践
  5. AngularJS和$scope.$apply()用法的最佳实践
  6. 微软,IBM,ARM等大公司先后加入对Node.js/io.js的支持
  7. 用原生HTML5控件实现输入框自动提示(下拉列表补全)功能
  8. 让我们写快速的JavaScript,JS性能优化小窍门
  9. 通过Web Audio API可视化输出MP3音乐频率波形
  10. 用页面可见性(Page Visibility)API创建用户体验良好的网站

 关键字 - JavaScript
  1. 40行JavaScript代码实现的3D旋转魔方动画效果
  2. 使用Javascript将相对路径地址转换为绝对路径
  3. 如何用CSS将select/option文本居中或居右对齐
  4. 给checkbox选择框设置不选中时的值
  5. 用原生HTML5控件实现输入框自动提示(下拉列表补全)功能
  6. JavaScript中怪异的地方
  7. 在JavaScript中创建命名空间的几种写法
  8. JavaScript中的继承,构造函数以及new关键字的作用
  9. 纽约时报使用Html5 WebRTC记录访问者IP地址
  10. 正则中test、exec、match的简单区别,以及括号的用法

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号