TypeScript

safeJsonParse — Result-Typed

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Parse JSON without ever throwing. Returns a Result-like discriminated union so callers must handle both success and failure paths at compile time.
TypeScript
Raw
type ParseResult<T> =
  | { ok: true;  value: T }
  | { ok: false; error: SyntaxError };

export function safeJsonParse<T = unknown>(text: string): ParseResult<T> {
  try {
    return { ok: true, value: JSON.parse(text) as T };
  } catch (e) {
    return { ok: false, error: e as SyntaxError };
  }
}

const r = safeJsonParse<{ id: number }>('{"id":42}');
if (r.ok) {
  console.log(r.value.id);          // narrowed → { id: number }
} else {
  console.error(r.error.message);   // narrowed → SyntaxError
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.