Skip to content

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.

Rajesh DhimanFebruary 08, 2026~18 min
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; BigInt throws.
  • 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 BigInt

3) Circular references crash stringify

const a = {};
a.self = a;
JSON.stringify(a); // TypeError: Converting circular structure to JSON

If 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.
Companion Book

Looking for structured, offline interview prep?

Free online lessons • Portable Amazon Kindle / Paperback

JavaScript Interview Guide cover
Recommended for Core JS Rounds

JavaScript Interview Guide

By Rajesh Dhiman

Deep dive into the Event Loop, microtask draining, closures, prototypal inheritance, and asynchronous execution patterns.

View on Amazon ↗Kindle & Paperback
Frontend Interview Guide (2025 Edition) cover
Recommended for React & Frontend Rounds

Frontend Interview Guide (2025 Edition)

By Rajesh Dhiman

Comprehensive preparation covering React internals, Web Performance, CSS architecture, and system design questions.

View on Amazon ↗Kindle & Paperback

Note: All lessons on Frontend Interview remain completely free to read online. As an Amazon Associate, we may earn from qualifying purchases.

RD

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.