特定のフィールドを 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'])));
編集- 混乱を避けるために、下部の機能のファンクションキーを変更しました。