JSON Schema Validator
Validate JSON with Draft 7 or 2020-12 schemas. Find failing paths and download a private report.
This tool runs entirely in your browser. Your data is never uploaded, never stored, and never leaves your device.
Checks JSON against Draft 7 or 2020-12 schemas locally and reports failing paths without changing input values.
How to use it
- 1Select the schema dialect and format-checking behavior.
- 2Paste or load the schema and JSON data, then validate.
- 3Inspect failing paths or download the diagnostic report.
Example
- Input
- Schema: {"type":"integer"} Data: "123"
- Output
- Does not match this schema (root): must be integer
What happens to your data
Validation stays in a local browser worker. External references are rejected, not fetched. Reports omit input values but may contain private field names; review before sharing.
Last updated October 2026
Check whether JSON matches a schema before integrating an API response, configuration or test fixture. Choose JSON Schema Draft 7 or 2020-12, paste both documents and inspect the failing data path. Validation runs in a separate browser worker; neither document is uploaded.
This is schema validation, not just syntax formatting. A JSON formatter can check commas and braces; a schema can also require fields, constrain types and limit array contents. A successful result establishes only that this particular input satisfies the selected rules—not that its facts, authorization or application behavior are correct.
How it works
Choose the dialect that matches your schema. An explicit $schema URI must match Draft 7 or 2020-12; Draft 2019-09, older drafts, custom keywords and asynchronous schemas are not supported. Unknown schema keywords are rejected rather than silently ignored. The validator uses Ajv and does not coerce types, insert defaults or remove extra properties.
Same-document fragment references such as #/$defs/person are supported. Remote, relative-file and other external references are rejected and never fetched. This deliberately conservative scan also applies to objects inside annotations and examples; remove unsupported reference-shaped examples if necessary. A network outage cannot make an external schema silently disappear because external resolution is not offered.
Standard format assertions, including email and date-time, are enabled by default and can be disabled explicitly. The switch changes validation behavior: a format annotation alone is not a universal guarantee that every validator will reject an invalid string. A syntactically valid email does not prove the mailbox exists.
The schema limit is 128 KiB and data limit is 512 KiB, with at most 48 nesting levels and 20,000 parser tokens per document. Uploaded files must be UTF-8 JSON. Duplicate object keys are rejected even when different escape spellings decode to the same key. Non-finite results, underflowed nonzero numbers and unsafe integers are rejected to prevent silent identifier rounding. Ordinary decimal calculations still use JavaScript floating-point arithmetic; represent exact money or large identifiers as strings and define suitable schema rules.
Validation stops at the first failing branch. anyOf and similar alternatives can produce several explanations; the report displays at most 20. A blank data path means the root. JSON Pointer paths escape a slash as ~1 and a tilde as ~0. The schema path identifies the rule, not a link to an external service.
Complex regular expressions or recursive rules can be expensive. Work is isolated from the interface in a disposable worker and stopped after 10 seconds, including worker startup. Cancel or changing any input terminates the old worker and clears its result. A timeout means no valid/invalid conclusion was reached; simplify the input rather than treating it as validation failure.
Reports exclude input values, but error messages and paths can contain field names or schema identifiers. Review the downloaded JSON before sharing it; this is not an anonymization service. No schema or data is intentionally saved to browser storage. Closing the page clears the working session, while downloaded files remain on your device.
Worked example: Find an email format error
- Input
- {"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]} Data: {"email":"not-an-email"} Standard formats: on
- Result
- Does not match this schema /email: must match format "email"
The report points to the email property. It does not include the supplied value or contact an email server.
Common use cases
- Checking a fixture against an API contract before writing integration code
- Finding a mistyped configuration field without uploading private configuration
- Comparing Draft 7 and 2020-12 behavior with an explicitly selected dialect
- Sharing a small diagnostic report after reviewing field names for privacy
Frequently asked questions
Why are __proto__ properties rejected?+
This JavaScript validator does not reliably apply property rules to that special name. It rejects the name anywhere in either document instead of reporting a misleading valid result. Rename it deliberately before validating.
Is my JSON uploaded?+
No. Schema parsing and validation run in a local browser worker. External references are rejected, and the tool never downloads another schema.
Does valid JSON mean it matches my schema?+
No. JSON syntax and schema rules are different checks. For example, the string 123 can be valid JSON but fail a schema requiring a number.
Will the validator fix my data?+
No. It reports rules that fail; it does not coerce types, insert default values or remove properties.
Can I validate very large IDs or exact financial decimals?+
Unsafe numeric integers are rejected. Use strings for large identifiers. Ordinary numeric decimals use floating-point arithmetic, so this is not an exact-decimal financial validation engine.
What does a timeout mean?+
The worker was stopped without a conclusion. Simplify complex regular expressions, recursive schemas or large inputs and try again. A timeout is neither a valid nor an invalid result.
Related tools
JSON Formatter & Validator
Format, validate, and minify JSON with exact line errors, a searchable tree, and private processing.
JSON Pointer Extractor
Extract JSON values with RFC 6901 pointers, preserve exact digits and download locally.
JSON Diff
Compare JSON by ID, ignore noisy paths and export a strict JSON Patch when the comparison permits.
JSON Flatten & Unflatten
Flatten and rebuild JSON with typed paths, exact number tokens and empty containers.