JSON in JavaScript: Serialization Pitfalls + Safe Parsing Patterns
A deep guide to JSON in JavaScript for interviews and real apps: JSON.stringify behavior, undefined/functions, dates, BigInt, circular references, and safe parsing/validation patterns.
On this page
JSON is everywhere in frontend work: APIs, localStorage, config, analytics.
Interviews use JSON questions to test whether you understand what JSON is and what it is not.
30‑second interview answer
JSON is a string data format with limited types (objects, arrays, strings, numbers, booleans, null). When you JSON.stringify, unsupported values like undefined/functions are dropped (and BigInt throws), and circular references fail. In real apps, always JSON.parse safely (try/catch) and validate shape before using the data.
Key points
- JSON ≠ JavaScript objects.
- stringify drops
undefined/functions;BigIntthrows. - Dates become strings.
- Always parse safely + validate.
1) JSON is a data format (not JavaScript)
JSON supports only:
- objects with string keys
- arrays
- strings
- numbers
- booleans
- null
No:
- undefined
- functions
- symbols
- dates (no Date type)
- BigInt
2) JSON.stringify rules you must know
A) undefined is dropped (in objects)
JSON.stringify({ a: 1, b: undefined });
// '{"a":1}'B) undefined becomes null (in arrays)
JSON.stringify([1, undefined, 3]);
// '[1,null,3]'C) Functions are dropped
JSON.stringify({ fn() {} });
// '{}'D) Dates become strings
JSON.stringify({ d: new Date('2025-01-01') });
// '{"d":"2025-01-01T00:00:00.000Z"}'E) BigInt throws
JSON.stringify({ n: 10n });
// TypeError: Do not know how to serialize a BigInt3) Circular references crash stringify
const a = {};
a.self = a;
JSON.stringify(a); // TypeError: Converting circular structure to JSONIf you need to log/debug circular objects:
- use safe serializers
- or custom replacer
4) The replacer function (useful pattern)
const json = JSON.stringify(obj, (key, value) => {
if (typeof value === 'bigint') return value.toString();
return value;
});You can also use replacer arrays to whitelist keys.
5) Safe parsing (don’t trust inputs)
A) Wrap JSON.parse
function safeJsonParse(str) {
try {
return { ok: true, value: JSON.parse(str) };
} catch (err) {
return { ok: false, error: err };
}
}B) Validate shape after parsing
Parsing only ensures it’s valid JSON—not that it’s the shape you expect.
In production apps, validate with a schema (e.g., Zod).
Pseudo:
- parse JSON
- validate schema
- reject invalid data
6) JSON in localStorage (common frontend case)
function save(key, value) {
localStorage.setItem(key, JSON.stringify(value));
}
function load(key, fallback) {
const raw = localStorage.getItem(key);
if (!raw) return fallback;
const parsed = safeJsonParse(raw);
return parsed.ok ? parsed.value : fallback;
}7) Interview Q&A
Q: What’s the difference between JSON and JS objects?
- JSON is a string format with limited types; JS objects can contain functions, undefined, Dates, etc.
Q: Why does JSON stringify drop undefined?
- JSON spec doesn’t support undefined.
Q: How do you handle Dates with JSON?
- serialize as ISO strings; parse back into Date objects if needed.
Q: How do you avoid runtime errors from JSON.parse?
- try/catch + validation.
Summary checklist
- I can list JSON supported types.
- I know what stringify drops/throws.
- I can explain Date handling.
- I always parse with try/catch and validate.
Summary
- JSON supports a limited set of types.
- JSON.stringify drops functions/undefined (and BigInt throws).
- Circular refs break stringify.
- Always parse safely and validate shapes.
Looking for structured, offline interview prep?
Free online lessons • Portable Amazon Kindle / Paperback
JavaScript Interview Guide
By Rajesh Dhiman
Deep dive into the Event Loop, microtask draining, closures, prototypal inheritance, and asynchronous execution patterns.
Frontend Interview Guide (2025 Edition)
By Rajesh Dhiman
Comprehensive preparation covering React internals, Web Performance, CSS architecture, and system design questions.
Note: All lessons on Frontend Interview remain completely free to read online. As an Amazon Associate, we may earn from qualifying purchases.
Written by Rajesh Dhiman
Authored by Rajesh Dhiman and engineered at Eunix Tech. Focused on deep-dive frontend engineering, JavaScript runtime internals, React architecture, and web performance.