一尘不染

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

json

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

这是一些伪代码

var x = {
    x:0,
    y:0,
    divID:"xyz",
    privateProperty1: 'foo',
    privateProperty2: 'bar'
}

我想排除privateProperty1和privateproperty2出现在json字符串中

所以我想,我可以使用stringify replacer函数

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的字符串。


阅读 426

收藏
2020-07-27

共1个答案

一尘不染

Mozilla的文档说回报undefined(而不是"none"):

http://jsfiddle.net/userdude/rZ5Px/

function replacer(key,value)
{
    if (key=="privateProperty1") return undefined;
    else if (key=="privateProperty2") return undefined;
    else return value;
}

var x = {
    x:0,
    y:0,
    divID:"xyz",
    privateProperty1: 'foo',
    privateProperty2: 'bar'
};

alert(JSON.stringify(x, replacer));

这是一种复制方法,以防万一您决定走那条路线(根据您的评论)。

http://jsfiddle.net/userdude/644sJ/

function omitKeys(obj, keys)
{
    var dup = {};
    for (var key in obj) {
        if (keys.indexOf(key) == -1) {
            dup[key] = obj[key];
        }
    }
    return dup;
}

var x = {
    x:0,
    y:0,
    divID:"xyz",
    privateProperty1: 'foo',
    privateProperty2: 'bar'
};

alert(JSON.stringify(omitKeys(x, ['privateProperty1','privateProperty2'])));

编辑 -我更改了底部功能中的功能键,以免混淆。

2020-07-27