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:
- Accept a default for the failure case.
- Catch only the EXPECTED error type.
- 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.