Schema

JSON Schema Validator

Paste a JSON document and a JSON Schema. The validator checks the schema itself, then the document, and explains every problem with the JSON path, the schema path and a plain message. Unsupported keywords are listed instead of being silently ignored.

Back

1. Document & schema

Draft 2020-12 subset

2. Result

Nothing fetched
Paste a JSON document and a schema, then press Validate.

Limits: 1 MB per input, 64 nested references, 200 listed errors. Remote $ref URLs are never fetched.

About this tool

About JSON Schema Validator

JSON Schema Validator checks a JSON document against a JSON Schema in your browser. It supports a documented subset of Draft 2020-12 — types, properties, required, additionalProperties, arrays, strings, numbers, enum, const, combinators and local $ref references — checks the schema’s own structure first, and explains each failure with the JSON path, the schema path and a plain message.

Schemas catch malformed API payloads, configuration files and test fixtures before they cause bugs. Validating locally keeps unpublished data private and gives clear, readable messages.

How to use

Step by step

  1. Paste the JSON document to check.
  2. Paste the JSON Schema.
  3. Press Validate.
  4. Fix any schema problems first, then review the document errors.
  5. Check the notes for unsupported keywords, then copy or download the report.
Key features

What it offers

  • Draft 2020-12 core validation keywords
  • Local $ref with JSON Pointer, including recursive schemas
  • Separate schema-structure check with clear problems and warnings
  • Remote references reported and never fetched
  • Honest warnings for unsupported or misspelled keywords
  • Limits on size, reference depth, steps and listed errors
Best practices

Tips for best results

  • Declare "type" alongside other constraints so mistakes are caught early.
  • Use additionalProperties: false to catch misspelled property names.
  • Keep shared definitions in $defs and reference them with $ref.
  • Treat a “not checked” note as unverified, not as valid.
Benefits

Why people use it

Readable

JSON path, schema path and plain message.

Honest

Never claims checks it did not run.

Safe

Remote references are not fetched.

Private

Runs entirely in your browser.

FAQ

Common questions

A documented subset of Draft 2020-12: type, properties, required, additionalProperties, patternProperties, items, prefixItems, minItems, maxItems, uniqueItems, contains, minLength, maxLength, pattern, minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, enum, const, allOf, anyOf, oneOf, not, if/then/else, min/maxProperties, dependentRequired, propertyNames and local $ref.
They are listed as warnings, and the result says that they were not checked — for example unevaluatedProperties or $dynamicRef. You will never see a plain “Valid” when part of the schema was skipped.
No. A $ref such as https://example.com/schema.json is reported as unsupported and is never fetched. Local references such as #/$defs/address are resolved, including recursive ones.
Recursive local references work for normal nested data. If references nest more than 64 levels deep without consuming data — for example a schema that refers only to itself — validation stops with a clear message instead of freezing the page.
No. In Draft 2020-12, format is an annotation by default, so values such as email or date are not validated. The report notes where format appears.
The JSON path, such as $.items[2].price, points to the value in your document. The schema path, such as #/properties/items/items/properties/price/minimum, points to the rule that failed.
No. Both the document and the schema are checked entirely in your browser. Nothing is uploaded, stored or fetched.
Private by design

This runs entirely in your browser

No file or text you enter here is uploaded. Encoding and decoding happen on your device using native browser APIs — close the tab and nothing remains on a server.

Install Toolisco Add it to your device for offline, one-tap access.