JSON Schema Validator
Validates a document against a JSON Schema and reports each failure with its instance path.
Validates a JSON document against a JSON Schema, draft 2020-12, entirely in the browser. It passes all 1,299 required tests of the official JSON-Schema-Test-Suite, and every failure is reported with the instance location and the keyword that produced it.
Schema (draft 2020-12)
Data to validate
Result
Verdict
Invalid
Failures
3
| Instance location | Keyword | Problem |
|---|---|---|
| /port | maximum | must be at most 65535 |
| /tags | uniqueItems | items 0 and 1 are equal |
| /debug | false | is never valid here (schema is false) |
$ref resolves within the schema, the pasted additional documents and the bundled 2020-12 meta-schemas — remote references are refused rather than fetched, so results never depend on the network. format is reported as an annotation, not enforced, which is the 2020-12 default.How to use it
Paste the schema and the data
Both boxes revalidate as you type. A syntax error in either is reported separately, so you know which side is broken.
Add referenced documents if you have `$ref`s
Turn on Additional schemas and paste them — one document or an array of them, each with its `$id`. Nothing is fetched over the network, so a schema split across files still validates here.
Read the failure table
Each row gives the instance path, the keyword that failed and what it wanted. Copy the whole set as JSON if you are pasting it into an issue.
Common questions
Why is my `"format": "email"` not enforced?
Because 2020-12 makes `format` an annotation by default — a validator is allowed to report it and not to check it, and most do exactly that. If you need it enforced, use `pattern`, or a validator configured with the format-assertion vocabulary.
A remote `$ref` failed to resolve.
Remote references are refused, not fetched. A validator that reaches out to the network gives results that depend on DNS and someone else’s uptime, and it tells that someone which schemas you are validating. Paste the referenced document into the additional-schemas box instead.
Which drafts are supported?
2020-12. A Draft-07 schema often validates anyway — most keywords are unchanged — but `definitions` is not `$defs`, `items` means something different for tuples, and `$recursiveRef` is gone. Check the `$schema` line before assuming.
Why so many errors for one wrong field?
Because a failure inside `anyOf`, `oneOf` or `allOf` reports every branch that failed — that is what the specification says an output unit contains. The first row is usually the one you want; the rest explain why no alternative matched either.
Feed it from
YAML Formatter & Validator
Re-indents YAML consistently, validates it, and flags the tab and anchor mistakes that break parsers.
JSON ⇄ YAML
Converts either way, preserving key order and choosing block or flow style for the YAML side.
JSON to Zod Schema
Builds a Zod schema from a JSON sample, with nullable, optional and enum inference.
JSON to JSON Schema
Infers a JSON Schema from one or several samples, unioning the shapes it sees.
Next
These accept what this tool produces, so the result can go straight in.
JSON Formatter & Validator
Pretty-prints, minifies and validates JSON, pointing at the exact line and column of a syntax error.
JSON to JSON Schema
Infers a JSON Schema from one or several samples, unioning the shapes it sees.
OpenAPI Linter
Checks an OpenAPI document for missing responses, unused schemas, references that point at nothing and the other faults that break code generators.
YAML Formatter & Validator
Re-indents YAML consistently, validates it, and flags the tab and anchor mistakes that break parsers.
JSON ⇄ CSV
Flattens nested JSON into columns or rebuilds objects from a table, with a dot-path column naming rule.
JSON Diff
Compares two JSON documents structurally, ignoring key order and reporting added, removed and changed paths.