JSON.stringify() の出力で特定の値を非表示にする 質問する

JSON.stringify() の出力で特定の値を非表示にする 質問する

特定のフィールドを 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;
}

そしてstringifyでは

var jsonString = json.stringify(x,replacer);

しかし、jsonStringでは、まだ次のように表示されます

{...privateProperty1:value..., privateProperty2:value }

プライベートプロパティを含まない文字列を取得したいと思います。

ベストアンサー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'])));

編集- 混乱を避けるために、下部の機能のファンクションキーを変更しました。

おすすめ記事