javascript JSON.stringifyは「undefined」が削除されてしまう
- 作成日 2022.11.19
- javascript
- javascript

javascriptでオブジェクトをjson形式の文字列に変換する「JSON.stringify」は「value」に「undefined」が存在すると削除されます。また、「関数」や「Symbol」も同様に削除されます。
環境
- OS windows11 pro 64bit
- ブラウザ chrome 107.0.5304.107
「undefined」が削除される
「JSON.stringify」を「undefined」を含むオブジェクトに使用すると「undefined」があるキーは削除されて表示されます。
const obj = {
a: undefined,
b: 'bbb',
c: undefined,
d: 'ccc',
e: undefined,
};
console.log(JSON.stringify(obj));
// {"b":"bbb","d":"ccc"} ← 削除される
これは「JSON.stringify」の仕様なようで、他にも「関数」や「Symbol」も削除されるようです。
試しに、複数のパターンで実行してみます。
const obj = {
a: 'str',
b: -1.01,
c: true,
d: false,
e: null,
f: NaN,
g: Infinity,
h: 0xFF,
i: [1],
j: {a:1},
k: new Date(),
l: new Map([[1, "a"], [2, "b"]]),
m: void 0, // void 0 は Undefinedが返ります
n: undefined,
o: ()=>{},
p: Symbol('hoge'),
q: [1,undefined],
r: {a:undefined},
};
console.log(JSON.stringify(obj));
見やすいように整形してから実行結果を確認してみます。
{
"a": "str",
"b": -1.01,
"c": true,
"d": false,
"e": null,
"f": null,
"g": null,
"h": 255,
"i": [
1
],
"j": {
"a": 1
},
"k": "2022-11-18T01:39:01.059Z",
"l": {},
"q": [
1,
null
],
"r": {}
}
仕様通り、削除されていることが確認できます。また、「NaN」や「Infinity」は「null」に変換されていることも確認でき、配列内にあた「undefined」も「null」に変換されてます。
「Map」や「Set」は、空のオブジェクトが返ります。
どうしても「undefined」を表示したい場合は、文字列に変換して表示する方法などがあります。
const obj = {
a: undefined,
b: 'bbb',
c: undefined,
d: 'ccc',
e: undefined,
};
console.log(JSON.stringify(obj,(k,v) => v === undefined ? 'undefined' : v ));
// {"a":"undefined","b":"bbb","c":"undefined","d":"ccc","e":"undefined"}
bigint
ちなみに、bigint型を使用した場合はエラーが発生します。
JSON.stringify({a: 10n});
// Uncaught TypeError: Do not know how to serialize a BigInt
-
前の記事
java 文字列の前後にある空白を除去する 2022.11.18
-
次の記事
javascript エラー「Uncaught TypeError: xxx.toDateString is not a function」の解決方法 2022.11.19
コメントを書く