Skip to content

JSON lint

Lint a JSON document (or paste it in) and download a structured report.

JSONlintvalidation

Upload

Files (0–1)
One JSON document, up to 4 MB, or paste it below.
Paste a JSON document instead of uploading a file. The same security checks and the same report apply.
Questions people ask
What does the tool report?
A structured JSON report with each finding in one of three classes: error (the document is not valid strict JSON: a syntax error with line and column, an invalid-UTF-8 byte run, non-standard NaN/Infinity tokens, or nesting that goes past the tool's internal 512-level cap), warning (a duplicate key at any depth, a top-level scalar rather than a container, a UTF-8 BOM), and info (structural context: total bytes, line count, top-level type). The report is always downloadable, whether or not the document passed.
How is this different from a JSON *validation* tool?
JSON validation means "is this document syntactically valid?" JSON lint goes further: it looks at the document the way a reviewer would (where is the error, on which line, what did I do wrong?) and surfaces the foot-guns that a parser would not flag (duplicate keys, a BOM at the start of the file, a top-level value that is not what you expected).
What is a duplicate key?
The JSON RFC does not say whether the first or last occurrence of a key wins; in practice most parsers use last-wins, so a document with two "a" keys in the same object silently drops the first value. This tool flags every duplicate with the offending key and its count.
Why does it refuse to parse a 5 MB document?
This tool is not a streaming validator. Anything past the 4 MiB cap is a job of a different shape; the tool will not pretend to process it and fail halfway, but will tell you it did not attempt to. The 512-level nesting cap is the same story: a "deep enough to overflow the parser's stack" document is a hostile shape, and the tool refuses it with a stable, deterministic error rather than crashing.
Does anything leave my server?
No. The processor runs in an isolated container with no network access and no external dependencies: it is a stdlib `json` invocation plus a small pre-scan for nesting depth. The report is generated locally and stays in your download window for 10 minutes; the upload is deleted the moment the job completes.