JSON.stringifyで無視したいプロパティがある場合
undefinedを設定する(JSON.stringifyの制限を利用する)
JSONはデータのみのマルチ言語仕様なので、JavaScript固有のオブジェクトプロパティの一部は JSON.stringify
ではスキップされます。
以下は無視されます。
- 関数プロパティ(メソッド)
- シンボルキーと値
undefined
を格納しているプロパティ
なので、手っ取り早く無視したいプロパティにはundefined
を設定する。
replacerでundefinedを設定する
undefinedを設定するという部分に違いはないのですが、undefinedを設定するタイミングが少し違います。
JSON.stringifyの第二引数でreplacerというfunctionを設定できるのでこれを使います。
例えば以下のようなデータがあるとします。
roomとmeetupが循環参照しているのでoccupiedByを無視したいというケースです。
let room = {
number: 23
};
let meetup = {
title: "Conference",
participants: [{name: "John"}, {name: "Alice"}],
place: room // meetup は room を参照
};
room.occupiedBy = meetup; // room は meetup を参照
alert( JSON.stringify(meetup, function replacer(key, value) {
return (key == 'occupiedBy') ? undefined : value;
}));
ただ、少し気になるのがオブジェクトを走査しているような動きなので、オブジェクト生成時にundefinedを設定できるならそのほうがいいのかもしれません。
ちなみに、replacer
の内側でのthis
の値は現在のプロパティを含むオブジェクトです。
ディスカッション
コメント一覧
まだ、コメントがありません