JavaScriptオブジェクトとJSON文字列を相互変換する
// ── JSON.stringify: オブジェクト → JSON文字列 ───────────
const user = { name: '田中', age: 25, tags: ['React', 'TypeScript'] };
const json = JSON.stringify(user);
console.log(json);
// '{"name":"田中","age":25,"tags":["React","TypeScript"]}'
// 第3引数でインデント指定(人が読みやすい形式)
const pretty = JSON.stringify(user, null, 2);
// {
// "name": "田中",
// ...
// }
// ── JSON.parse: JSON文字列 → オブジェクト ─────────────
const parsed = JSON.parse(json);
console.log(parsed.name); // '田中'
// ── よく使うパターン: ディープコピー ───────────────────
// ※ 関数・Date・undefinedは消える点に注意
const original = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(original));
copy.b.c = 99; // original.b.c は変わらない
// ── エラーハンドリング ──────────────────────────────────
try {
const bad = JSON.parse('{ invalid }'); // 不正なJSON
} catch (e) {
console.error('JSONパースエラー:', e.message);
}undefinedや関数はstringifyで除外される。Dateオブジェクトは文字列になりパース時に自動復元されないためreviverが必要。