嘿,我有一个像这样的数组对象
[{
public: "public",
private: "private",
[{
properties: {...
},
instance: {.....
}
}, {...
}, {...
}]
}, {...
}, {....
}]
这里最外面的数组包含A类的对象,它有一些公共道具,一些私有porps,它还包含一个包含B类对象的数组,该数组还包含一些公共和私有字段。
所以基本上这是我的层次结构
array = [A1,A2,A3,A4,....]//object of A
var A = function(){
var Const = function(){
this.public_prop;
this.private_prop;
this.list = [B1,B2,B3,B4]// objects of B
}
//.........
return Const;
}();
var B = function(){
var Const = function(){
this.public_prop;
this.private_prop;
}
//.........
return Const;
}();
现在在进行字符串化(序列化)时,我只想在序列化字符串中包含公共prop和数组。
例如对于上面的JSON表示我想要这样的东西
[{
public: "public",
[{
properties: {...
}
}, {...
}, {...
}]
}, {...
}, {....
}]
现在我可以在每个类中创建一个函数 getState(),它只会返回需要字符串化的字段,但我似乎无法找到一种方法来实现JSON.stringify的本机实现在序列化之前调用该方法。有没有办法实现这个目标?
我提到了Hide certain values in output from JSON.stringify(),但它只解释了如何在单个层次结构中排除简单的数字或字符串道具,但是如何排除多个层次结构中的道具?
注意:我的所有课程都遵循模块模式
答案 0 :(得分:4)
var result = JSON.stringify(myjson, function(key, val) {
if (key !== "private")
return val;
});
顶部的对象示例不是有效语法,但要排除名为"private"
的属性,这应该可以。
答案 1 :(得分:2)
假设您正在编写JavaScript,因为您的问题标签建议(尽管您的示例代码看起来几乎是c#!):您需要覆盖您要序列化的对象的“toJSON”方法,而不是“stringify” “的getState”。
因此,如果您的对象“Message”具有公共和“私有”属性,则需要定义仅返回公共属性的“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"}
答案 2 :(得分:2)
可能有点迟,但JSON.stringify
签名接受replacer
函数/数组。您可以根据需要定义阵列白名单和功能。