JSON Validator
Find out whether a document is valid JSON, and if it is not, which line and column the parser gave up on. Furtu also reports the shape of what it parsed — how many objects, arrays and keys, and how deep it goes — and warns about the invisible byte order mark that breaks more real files than any syntax error.
A U+FEFF at the start of a file is invisible, and JSON does not allow it.
Object, array and key counts, plus the deepest nesting level found.
How json validator works
- Paste the documentThe check runs on every keystroke, so the answer is immediate.
- Read the verdictEither a valid result with a shape summary, or the parser’s complaint with the line and column that caused it.
- Fix the lineThe reported column is the character after the problem, which is where the offending character sits.
What you get
Check a JSON document and be told exactly where it breaks. Everything happens inside this page: the file is read by your browser, transformed in memory and handed straight back to you as a download. There is no upload queue, no waiting for a server, and nothing left behind when you close the tab.
Supported formats
This tool works on text you paste or type, so there is no file format to worry about. Nothing you type is sent anywhere.
Limitations, stated up front
- Duplicate keys are not reported, and the parser resolves them by keeping the last value.
- There is no schema validation here: no required properties, no type checks, no $ref resolution, and no remote schema fetch.
Frequently asked questions
What does a valid result actually tell me?
That the document parses. It does not tell you the values are right for your purpose: a JSON array where you expected an object parses perfectly and breaks your code just as thoroughly. Furtu reports the root type and the shape so you can see that, but validating against a schema is a different job.
How accurate is the line and column?
It comes from the parser’s own position, converted to a line and column by counting newlines up to that point. Some engines report a character offset and some report a line and column, and Furtu prefers the offset because it survives multi-byte characters. When the engine reports neither, the position is derived from the snippet it includes and is labelled as approximate.
Does it check for duplicate keys?
No, and this is a real gap worth naming. JSON.parse accepts a document with the same key twice and silently keeps the last one, because the grammar allows it and the specification says the behaviour is undefined. Catching it needs a second parser, which Furtu does not run. If duplicate keys matter to you, check the source.
Is the document sent anywhere for checking?
No. The browser’s own parser does the work. The privacy banner on this page is driven by a field in the tool definition, not by a policy page, and this tool’s field says local.
Is the payload I am validating sent anywhere?
No. It is parsed in your browser and discarded when the page closes. That matters when the payload is a captured API response containing tokens or personal data.