Skip to main content
← ⚑ JavaScript & the browserΒ·Module C7 Β· Lesson 9
TaskWrite safeParse(str, fallback) that returns JSON.parse(str) on success, fallback on SyntaxError, re-throws other errors. Test with safeParse('{"a":1}'), safeParse('not json', 'bad'), safeParse('[1,2,3]', []). Log JSON.stringify of each result.

Defensive parsing of unknown input

125 XP9 min
Theory

JSON.parse can throw

JSON.parse(str) throws SyntaxError on any non-JSON input. If str comes from a URL, localStorage, or any external source, you must guard.

function safeParse(str, fallback = null) {
  try {
    return JSON.parse(str);
  } catch (err) {
    if (err instanceof SyntaxError) return fallback;
    throw err;  // unknown error β€” re-throw
  }
}

safeParse('{"a":1}');         // { a: 1 }
safeParse("not json", []);    // []

The pattern

Functions consuming external data should:

  1. Accept a default for the failure case.
  2. Catch only the EXPECTED error type.
  3. Re-throw anything else.

This shape pops up everywhere β€” query string parsing, file uploads, IPC messages, webhook bodies. Same code.

Defensive but not paranoid

Don't wrap every operation in try/catch β€” that's noise. Wrap operations that CAN fail at known boundaries: network, user input, file I/O, third-party libs. Internal code should trust itself.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.