首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >隐藏JSON.stringify()输出中的某些值

隐藏JSON.stringify()输出中的某些值
EN

Stack Overflow用户
提问于 2011-02-06 08:01:17
回答 12查看 78K关注 0票数 100

是否可以将某些字段排除在json字符串之外?

下面是一些伪代码

代码语言:javascript
复制
var x = {
    x:0,
    y:0,
    divID:"xyz",
    privateProperty1: 'foo',
    privateProperty2: 'bar'
}

我不想让privateProperty1和privateproperty2出现在json字符串中

所以我想,我可以使用stringify替换函数

代码语言:javascript
复制
function replacer(key,value)
{
    if (key=="privateProperty1") then retun "none";
    else if (key=="privateProperty2") then retun "none";
    else return value;
}

在字符串中

代码语言:javascript
复制
var jsonString = json.stringify(x,replacer);

但在jsonString中,我仍然认为

代码语言:javascript
复制
{...privateProperty1:value..., privateProperty2:value }

我希望字符串中不包含privateproperties。

EN

回答 12

Stack Overflow用户

发布于 2016-02-02 03:10:07

另一个好的解决方案:(需要下划线)

代码语言:javascript
复制
x.toJSON = function () {
    return _.omit(this, [ "privateProperty1", "privateProperty2" ]);
};

这种解决方案的好处是,任何在x上调用JSON.stringify的人都将获得正确的结果--您不必单独更改JSON.stringify调用。

非下划线版本:

代码语言:javascript
复制
x.toJSON = function () {
    var result = {};
    for (var x in this) {
        if (x !== "privateProperty1" && x !== "privateProperty2") {
            result[x] = this[x];
        }
    }
    return result;
};
票数 35
EN

Stack Overflow用户

发布于 2020-06-19 03:16:38

这是一个老问题,但我添加了一个答案,因为有一个简单得多的方法来解决这个问题。传递您希望在JSON中输出的字符串数组。

代码语言:javascript
复制
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"}

票数 5
EN

Stack Overflow用户

发布于 2016-09-10 23:27:40

Object.create是另一个与defineProperty解决方案相近的解决方案(属性以相同的方式定义),但是通过这种方式,您可以从一开始就定义要公开的属性。通过这种方式,您可以通过将属性for的值设置为true (默认情况下为false)来仅公开您想要的属性,JSON.stringify将忽略不可枚举的属性,缺点是当在对象或Object.keys等函数上使用enumerable - In循环时,此属性也将被隐藏。

代码语言:javascript
复制
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"}"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4910567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档