Running on your device · 0 bytes uploaded

# Validate JSON against a JSON Schema

Paste a schema and a document. Ajv compiles the schema in a disposable worker — drafts 2020-12, 2019-09, and draft-07 — and nothing is ever fetched to resolve a reference. Every surprise in your input is reported, never silent.
2020-122019-09Draft-07Insert sample pairClearJSONC schema (comments + trailing commas)

Remote $refs are never fetched
JSONC instance (comments + trailing commas)

Strict JSON

Paste both sides — the schema and the document. The rules panel below states every mapping before anything runs.
Nothing in yet

Paste, drop, or type to begin. Everything stays on this device.

## How draft 2020-12 validates

### Draft 2020-12 rules ( Ajv2020 )

- Arrays validate per item: prefixItems applies by position, then items applies to the rest of the array.
- $dynamicRef/$dynamicAnchor resolve recursively; $defs is the canonical definitions home (definitions still reads).
- items alone (no prefixItems) applies to every element; items: false means no extra elements.
- Unevaluated properties/items account for everything adjacent keywords already validated.

### Rules for every draft

- Numbers validate as IEEE-754 doubles: a spelling that does not round-trip (1e400, 30-digit integers) is flagged as a note, never silently trusted.
- Remote references ($ref to another document) are NEVER fetched — inline the schema or use $defs. Compilation happens in a disposable worker that is terminated on timeout.
- Standard formats (date-time, email, uuid…) validate through ajv-formats; an unknown format is a compile error, not a pass.
- Duplicate keys follow the family rule: last value wins, and the run reports it.

A `$schema` declaration in the schema overrides the draft selector — the run says which draft it used and why. Compilation happens in a disposable worker that is terminated on timeout, so a hostile schema cannot outlive its own run.

## Next door in JSON

- [JSON Validator](/json/validator)
- [JSON to Code](/json/codegen)
- [JSON Converter](/json/convert)
[All JSON tools](/json)

---

Canonical HTML: https://nutter.tools/json/schema
Markdown version: https://nutter.tools/json/schema/index.md
Plain-text version: https://nutter.tools/json/schema/index.txt
Agent index: https://nutter.tools/llms.txt

