Written by Jane Smith · Reviewed by Sarah Mitchell · July 16, 2026
Paste JSON data below to validate its syntax, format it with proper indentation, or minify it into a compact string.
Drop any JSON document into the left textarea and this page tells you one thing with certainty: whether the text is grammatically valid JSON according to the ECMAScript specification, which is the same grammar every JavaScript runtime enforces. The Validate button answers with a green confirmation or a red verdict carrying the parser's exact complaint, and the Format and Minify buttons re-emit valid input so you can read it or compress it in the same session. It is the page you want when a server just rejected a payload, a config file will not load, or a paste from a log looks almost but not quite like JSON.
The tool delegates to the browser's native JSON.parse(), and that function negotiates no compromises. Objects need double-quoted keys and values, strings cannot contain raw line breaks, numbers may not carry leading zeros or a leading plus, and a comma is never allowed right before a closing brace or bracket. Formatting runs the parsed result through JSON.stringify() with a fixed two-space indent, and Minify drops every space and newline to produce the smallest valid form. Whatever the button, an empty box earns a prompt instead of a result, and a failed parse clears the output pane and prints the parser's message in red.
Error messages from the parser read like coordinates, and each failure mode has its own. Paste {'name': 'Ada'} and the verdict is Expected property name or '}' in JSON at position 1 (line 1 column 2) — the single quotes are the problem, because JSON demands double quotes. Try {"name": "Ada" "role": "engineer"} and you get Expected ',' or '}' after property value in JSON at position 15 (line 1 column 16), pinpointing the missing comma between the two entries. A trailing comma inside an array, [1, 2, 3,], produces Unexpected token ']', "[1, 2, 3,]" is not valid JSON. Feed in {"name":"Ada","role":"engineer"} and the page answers ✅ Valid JSON!, then Format re-renders it with each field on its own indented line. The position in parentheses counts characters from zero while the column counts from one, so position 15 is the 16th character — useful when hunting the exact offending spot.
Grammar is not meaning. A document can pass validation and still be wrong for your purposes: the checker has no idea whether a required field is missing, whether a string should have been a number, or whether a key was typo'd, because it compares nothing against any schema. It also accepts quirks you might consider bugs — {"a":1,"a":2} validates cleanly with only the last value surviving, and 1e999 parses to the value Infinity, valid syntax producing an unusable number. On the other side, 01 and +1 are rejected outright, comments and trailing commas always fail, and a whitespace-only box earns the enter-something prompt rather than a verdict. Files of a few megabytes parse fine, though the work is synchronous, so the tab may stall on very large documents.
Because the specification allows only double quotes for property names and string values. Single quotes, backticks, and unquoted keys are JavaScript conveniences that JSON never adopted, and the parser flags the first character that breaks the rule.
Not for the parser. {"a":1,"a":2} is accepted, and the later value silently overwrites the earlier one. Validators that check uniqueness are doing schema-level work this page does not attempt.
It means the text is well-formed JSON, nothing more. Whether the structure matches what the receiving system expects is a separate question, and this page will happily bless a document that is missing every field your API requires.
This page keeps indentation fixed at two spaces so the output is predictable. If you want the choice of 2-space, 4-space, or tab indentation plus a recursive key count, the sibling formatter page on this site offers those extras.
The position is zero-based — character 0 is the first character — while the line and column count from one, so the pair "(position 15, line 1 column 16)" both describe the same spot from different starting points.
No — validation and formatting run locally in this tab, and the document is never transmitted, logged, or stored anywhere else.
Use it whenever a file or payload must conform to strict JSON: config files heading to a parser, API responses that need a sanity check before you debug further, or snippets you intend to paste into code where a syntax slip will not surface until runtime. Skip it when your file legitimately uses comments or JSON5 syntax, when you need schema-level validation of required fields and types, or when the document is large enough that a synchronous in-browser parse could freeze the tab. And when the task is purely cosmetic — picking an indentation style or counting keys — the formatter page is the better fit.