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

零丶      2022-02-17     176

关键词:

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中。

















































在类中使用 RxJs 主题时 JSON.stringify 上的循环对象异常

...ass【发布时间】:2018-09-0110:21:25【问题描述】:我在使用序列化恰好具有Rxjs主题的类时遇到循环对象异常错误。如果我在课堂上订阅该主题,当我尝试字符串化时,我会得到一个循环对象异常。我的示例类这个...expor 查看详情

序列化json对象的三种方式

参考技术A序列化json对象即是把json对象转换成json字符串,通常情况下都是用JSON.stringify方法,其实还有另外两个库可以实现此需求,但它们之间有些区别。上面的json对象qs.stringify序列化结果如下:而JSON.stringify序列化结果如下:... 查看详情

在没有序列化程序的对象上使用 JSON.stringify 需要标记为实验性

】在没有序列化程序的对象上使用JSON.stringify需要标记为实验性【英文标题】:UsingJSON.stringifyonobjectwithoutserializerneedstobemarkedasexperimental【发布时间】:2019-05-0713:22:44【问题描述】:在AndroidStudio中使用kotlin插件1.3.10,当我尝试将... 查看详情

JSON.stringify() - 对象的自定义序列化器

】JSON.stringify()-对象的自定义序列化器【英文标题】:JSON.stringify()-object\'scustomserializer【发布时间】:2019-03-2412:40:39【问题描述】:假设我有一个对象:consta=foo:123,bar:\'example\'这个对象是许多其他对象的一部分,即constb=a:a,anotherF... 查看详情

json.parse(json.stringify())实现对对象的深拷贝(代码片段)

...来深拷贝,其过程说白了就是利用JSON.stringify将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存... 查看详情

json序列化

...个方法:SON.stringify()和JSON.parse()。功能:把JavaScript对象序列化为JSON字符串(JavaScript对象(Object)转换成JSON数据传输)语法:JSON.stringify(value[,replacer[,space]])=>JSON.stringify(value,replacer,space)功能:把JSON字符串解析为原生JavaScript对象(把J... 查看详情

深度使用json.stringify()

按照JSON的规范,使用JSON.stringify()做对象序列化时,如果一个属性为函数,那这个属性就会被忽略。constdata1={a:‘aaa‘,fn:function(){returntrue}}JSON.stringify(data)//结果是"{"a":"aaa"}"还有一种情况,一个属性的值为undefinedconstdata2={a:‘abc‘,... 查看详情

关于json.stringify的妙用

...性,可以这样来操作JSON.stringify(value,replacer,space)语法将要序列化成一个JSON字符串的值。如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含... 查看详情

json.stringify 对象并重命名 json 中的变量

...lesinjson【发布时间】:2022-01-2015:29:05【问题描述】:我想序列化一个对象o,它有一个名为a的方法。该对象还包含一个变量,其名称为_a。我现在想将此对象解析为JSON字符串。但是JSON看起来像这样:"_a":"",...问题有没有办法舒适... 查看详情

json对象

JSON对象  常用方法:  1.JSON.stringify()序列化数组,对象等  2.JSON.parse()反序列化 使用场景  ajax与后端进行数据传递时,极其重要  比如:在nodejs中,需要将从数据库中查找的数组传递到前端,此时需要将数组序... 查看详情

浅谈js中的json.stringify()和json.parse()

...)和JSON.parse()是一对处理JSON数据的方法,前者是将JSON对象序列化为字符串,而后者是将JSON字符串解析为JSON对象。但是你有较为深入地去了解过它们吗?它们分别可以传入几个参数以及每个参数对应的作用是什么你知道吗?它可... 查看详情

json.stringify深拷贝的缺点

...的情况也无法正确实现深拷贝6、如果对象中存在NAN,则序列化后会变成null 查看详情

json.stringify(),json.parse(),tojson()方法使用

JSON.stringify():将value(Object,Array,String,Number...)序列化为JSON字符串JSON.parse():将JSON数据解析为js原生值toJSON(),作为JSON.stringify中第二个参数(函数过滤器)补充,理解内部顺序很重要。假设把一个对象传入JSON.stringify()序列化对象的顺序如... 查看详情

stringify字符串转化成json方法

参照原文:http://www.cnblogs.com/damonlan/http://www.jb51.net/article/29893.htm stringify的作用主要是序列化对象(转化为json对象)语法: JSON.stringify(value[,replacer][,space]) 1.value:必选,你输入的对象,比如数组,类等等。 2 查看详情

对象序列化

对象序列化是指将对象的状态转化为字符串,也可以将字符串还原成对象。通过函数JSON.stringify()和JSON.parse()用来序列化和还原对象。varobj={person:{name:‘kevin‘,age:20},firm:‘baidu‘};varstrObj=JSON.stringify(obj);console.log(strObj);//{"person":{"na... 查看详情

js解析与序列化json数据(一)json.stringify()的基本用法

...在最简单的情况下,这两个方法分别用于把JavaScript对象序列化为JSON字符串和把JSON字符串解析为原生JavaScript。例如:新建一个HTML:代码如下:复制代码代码如下:<html><head><title></title><scripttype="text/javascript... 查看详情

将对象序列化为 JSON

】将对象序列化为JSON【英文标题】:SerializinganobjecttoJSON【发布时间】:2010-10-0804:40:50【问题描述】:如何在JavaScript中?【问题讨论】:【参考方案1】:您正在寻找JSON.stringify()。【讨论】:将JSON.stringify()与包含数组的javascript... 查看详情

010天json.stringify()详解(代码片段)

JSON.stringify()除了要序列化的js对象外,还可以接受另外两个参数,这两个参数用于指定以不同的方式序列化js对象。第一个参数是个过滤器,可以是一个数组,也可以是一个函数;第二个参数是一个选项,表示是否在JSON字符串中... 查看详情