Validate JSON against a JSON Schema (2020-12, 2019-09, draft 7), with each error located
Runs in your browser. Nothing you type is sent anywhere. Checked against sources on 16 Oct 2026.A JSON Schema validator checks that a JSON document has the shape a schema describes: the right types, the required properties, values within limits and no unexpected keys. This one supports drafts 2020-12, 2019-09, 7, 6 and 4, passes 1,652 cases of the official test suite, and points at each failing value by path and line.
Paste the schema into the Schema pane and the JSON into the Data pane, or click Try an example.
Read the result: Valid, or a list of errors, each with the path of the value and what is wrong.
Click an error to put the cursor on that value in the Data pane, fix it, and the list updates as you type.
Turn on Check formats to also test email, date-time, URI and the other common formats.
JSON Schema is the standard way to describe what valid JSON looks like, used by OpenAPI, form builders, config files and data pipelines. Paste a schema and a document, and the result updates as you type.
What is checked. Every assertion in the validation vocabulary: type, enum, const, number limits and multipleOf, string length and pattern, array length, uniqueItems, contains, object size, required, dependentRequired, and the applicators properties, patternProperties, additionalProperties, items, prefixItems, allOf, anyOf, oneOf, not and if/then/else. References with $ref follow JSON pointers, $defs, definitions, $id and $anchor inside the schema.
Which draft. The draft comes from $schema, or 2020-12 when the schema names none, and you can override it. The differences matter: in draft 7, items with an array checks each position and keywords beside $ref are ignored; in 2020-12 positions move to prefixItems and $ref combines with its siblings.
Formats. Since 2019-09, format is an annotation, not a check. Turn on Check formats to test email, date-time, date, time, uri, uuid, ipv4, ipv6 and hostname anyway, as most people expect.
Errors you can act on. Each error gives the path of the failing value, such as /tags/1, its line in the Data pane, and the rule it broke. Click it and the cursor lands on that value.
What it does not do. unevaluatedProperties, unevaluatedItems and $dynamicRef are not evaluated, and a $ref to a schema on another server is not fetched. The page says so whenever a schema uses one, instead of passing the data silently.
Generate a schema. Paste a sample instead, and a starting schema is written from it, ready to tighten.
The validator is tested against the official JSON-Schema-Test-Suite. Everything runs in your browser; nothing you paste is sent anywhere.
Paste the schema into the Schema pane and the JSON document into the Data pane. The result appears at once: Valid, or a list of errors, each naming the path of the bad value, such as /items/2/price, and the rule it broke, such as minimum 0. Fix the data or the schema and the list updates as you type.
Use 2020-12 for new schemas: it is the current specification and what OpenAPI 3.1 uses. Draft 7 remains common in older tools and libraries. Declare the version in $schema, for example https://json-schema.org/draft/2020-12/schema, because array tuples, $ref and dependencies behave differently between versions.
Setting additionalProperties to false makes any property not listed in properties, and not matched by patternProperties, an error. A typo such as emial instead of email is then caught instead of ignored. Properties added through allOf in another subschema are not seen, which is a common surprise; list them in the same schema.
Since 2019-09 the format keyword is only an annotation by default, so validators are not required to check it. Turn on Check formats here to test email, date-time, date, time, uri, uuid, ipv4, ipv6 and hostname. In code, libraries such as Ajv need format checking switched on separately too.
required names the exact properties that must be present, such as id and email, while minProperties only counts them: minProperties 2 accepts any two keys. A property listed in properties but not in required is optional, and when present it must still match its own schema.
Yes. Switch to Generate schema and paste a sample in the Data pane: a 2020-12 schema is written with every property typed and the keys present in all records marked required. A sample cannot show limits, formats or allowed values, so add minimum, format and enum by hand before relying on it.
Rates and rules change; check the source before you rely on a figure.
Still stuck? Ask about JSON Schema Validator and anybody who knows can answer. No account needed.
Same job, other tools: Twitter Card Validator – Check twitter:card tags and the og: tags X falls back to · Link Preview Checker – Find the missing tag behind a WhatsApp or Slack link with no picture · Readability Checker – Flesch reading ease and grade level, with what to change · User-Agent String Checker – Check what a user-agent string can and cannot tell you before you rely on it.
On the related tools: JSONPath Evaluator – Evaluate a JSONPath expression and get the matching values and their paths.