1. ホーム
  2. javascript

[解決済み] JSON.stringify()の出力で特定の値を隠蔽する。

2022-11-28 13:54:12

質問

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 }

privatepropertyを含まない文字列が欲しいです。

どのように解決するのですか?

この 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'])));

EDIT - 紛らわしいので、一番下のファンクションキーを変更しました。