是否可以将某些字段排除在json字符串之外?
下面是一些伪代码
var x = {
x:0,
y:0,
divID:"xyz",
privateProperty1: 'foo',
privateProperty2: 'bar'
}
我不想让privateProperty1和privateproperty2出现在json字符串中
所以我想,我可以使用stringify替换函数
function replacer(key,value)
{
if (key=="privateProperty1") then retun "none";
else if (key=="privateProperty2") then retun "none";
else return value;
}
在字符串中
var jsonString = json.stringify(x,replacer);
但在jsonString中,我仍然认为
{...privateProperty1:value..., privateProperty2:value }
我希望字符串中不包含privateproperties。
发布于 2016-02-02 03:10:07
另一个好的解决方案:(需要下划线)
x.toJSON = function () {
return _.omit(this, [ "privateProperty1", "privateProperty2" ]);
};
这种解决方案的好处是,任何在x上调用JSON.stringify的人都将获得正确的结果--您不必单独更改JSON.stringify调用。
非下划线版本:
x.toJSON = function () {
var result = {};
for (var x in this) {
if (x !== "privateProperty1" && x !== "privateProperty2") {
result[x] = this[x];
}
}
return result;
};
发布于 2020-06-19 03:16:38
这是一个老问题,但我添加了一个答案,因为有一个简单得多的方法来解决这个问题。传递您希望在JSON中输出的字符串数组。
var x = {
x:0,
y:0,
divID:"xyz",
privateProperty1: 'foo',
privateProperty2: 'bar'
}
JSON.stringify(x, ["x", "y", "divID"]);
// This will output only x y and divID
// {"x":0,"y":0,"divID":"xyz"}
发布于 2016-09-10 23:27:40
Object.create是另一个与defineProperty解决方案相近的解决方案(属性以相同的方式定义),但是通过这种方式,您可以从一开始就定义要公开的属性。通过这种方式,您可以通过将属性for的值设置为true (默认情况下为false)来仅公开您想要的属性,JSON.stringify将忽略不可枚举的属性,缺点是当在对象或Object.keys等函数上使用enumerable
- In循环时,此属性也将被隐藏。
var x = Object.create(null, {
x: {value:0, enumerable: true},
y:{value: 0, enumerable: true},
divID: {value: 'xyz', enumerable: true},
privateProperty1: {value: 'foo'},
privateProperty2: {value: 'bar'}
});
JSON.stringify(x)
//"{"x":0,"y":0,"divID":"xyz"}"
https://stackoverflow.com/questions/4910567
复制相似问题