Validate a JSON instance against a schema
Check supplied Draft 2020-12 constraints, inspect every supported rule failure and save the complete validation report.
The selected file is read only after you click Run. Reading, checks and processing share one 10-second task period.
Input, work and complete-output limits apply to the entire request. Exceeding one refuses the result; see this tool’s limits.
JSON instance
Draft 2020-12 schema
Before you start
Check supplied Draft 2020-12 constraints, inspect every supported rule failure and save the complete validation report.
How to use this tool
- Provide the instance and the authoritative schema in their separate roles.
- Choose the active source mode for each role. File selection shows metadata only; click Run to read and process.
- Validate; distinguish a refused schema/profile from a successfully evaluated invalid instance.
- Read instance pointers and evaluation paths. Save validation-report.json or copy the complete report.
Supported inputs and limits
Instance up to 1 MiB, 50,000 value nodes and depth 64; schema up to 128 KiB, 5,000 nodes, depth 32 and 1,000 schema locations. Node depth starts at zero.
Fixed Draft 2020-12 static subset: types, const/enum, required and dependencies, properties and arrays, numeric/string rules, applicators and acyclic same-document JSON Pointer references. Unknown or unsupported keywords stop the run.
All JSON numeric tokens must be mathematically integral and within ±9,007,199,254,740,991. Decimal notation such as 1.00 is allowed when its exact value is integral; fractional and rounded unsafe values are refused.
Flat ECMA262-u patterns up to 128 UTF-8 bytes allow literals, character classes, anchors, dot and simple quantifiers. Grouping, alternation, backreferences and alphabetic shorthand escapes except f/n/r/t/v are refused. No remote refs, anchors, dynamic refs, unevaluated rules, format or custom validation code.
Unsupported schema vocabulary/content keywords, $anchor/$dynamicAnchor/$dynamicRef, unevaluated rules, format, nested $id, remote or percent/anchor references and recursive local references refuse the run. This static profile is not full Draft 2020-12 conformance.
Validation and deep-comparison calls together allow 2,000,000; all attempted distinct diagnostics allow 20,000 and 8 MiB of compact diagnostic work. The complete exported report allows 8 MiB. Any exceeded limit refuses the complete result.
Cumulative schema-location JSON Pointer paths allow 8 MiB. Schema location count and path bytes are checked before path allocation; a syntactically valid oversized profile is refused as a complete result.
Each role uses either its pasted value or exactly one selected UTF-8 file; clear the selected file to paste. An empty or invalid active file never falls back to hidden pasted text. A filename label allows 512 UTF-8 bytes.
One leading BOM is removed and recorded, including pasted input. Invalid UTF-8, decoded duplicate JSON keys and unpaired Unicode surrogates are refused. Inputs stay in this browser.
A fixed 10-second whole-task deadline or cancellation returns no partial export. Rerun after correcting the input; a fresh Worker starts each job.
Every retained diagnostic entry, including parent wrappers and repeated four-field entries, stays in the complete report. keywordLocation is an evaluation path with local reference transitions, not an absolute resolved source pointer. Technical error text remains unchanged.
File contents are read only after Run, within the same fixed 10-second period as engine loading, checks and processing. Cancelling or exceeding any limit publishes no partial copy or download. Only the current tab holds the inputs in bounded memory.
The screen uses a bounded preview. Complete copied data and downloadable artifacts keep all diagnostics, ordered matches and source identity. Files and names are processed locally; no content upload or remote reference fetch.
Worked example
Example input
instance: {"root":[{"nono":"text"}]}
schema: {"type":"object","properties":{"root":{"type":"array","items":{"type":"object","properties":{"a":{"type":"string"}},"required":["a"]}}}}Example options
2020-12-static-integer-v1
Example output
invalid: required a at #/root/0; complete validation-report.json contains all 3 diagnostics, including parent properties/items failures.
When something does not work
Move object rules under array items when intended; correct syntax or unsupported constraints, then rerun. A valid result means this instance satisfies the supported supplied schema. After cancellation, rerun the unchanged active sources in a fresh request. Refused inputs and timed-out requests do not yield partial artifacts.
Frequently asked questions
Does a valid result prove full Draft 2020-12 compliance?
No. It means this instance satisfies the supplied schema within the fixed static safe-integer profile. Unsupported keywords or references are refused before evaluation.
When is a selected file read?
The selected file is read only after you click Run. Reading, checks and processing share one 10-second task period. Each role uses its selected mode only. An invalid active file never falls back to hidden pasted text.
Is the copied result only a preview?
No. Copy is the complete validation report, preserving diagnostic entries and their multiplicity; download contains the same report.