ちょっと西の湖岸から

@plum_shiga が何かを思い立ったら書くところです

JSON.stringify() での undefined と null の取り扱われ方の違い

概要

JSON.stringify() を使って、json の値渡しっぽいことをしようと思ったら、
undefined と null の取り扱いで時間を食ったのでメモ。

やったこと

let from_obj = {aaa : 'rockman', bbb : undefined, ccc : 'gutsman'};
let to_obj = {};

to_obj = JSON.stringify(from_obj);
to_obj = JSON.parse(from_obj);

期待結果

まったく同じjsonが復帰する

実際

bbb の結果は null になっていた

対応

let from_obj = {aaa : 'rockman', bbb : undefined, ccc : 'gutsman'};
let to_obj = {};

to_obj = JSON.stringify(
    from_obj,
    function(k, v) { if (v === undefined) { return 'undefined'; } return v;}
);
to_obj = JSON.parse(from_obj);

Note

そもそも JSON Schema で undefined は 許されていない。

json-schema.org
developer.mozilla.org