JSON SCHEMA VALIDATOR

Check JSON data against a JSON Schema and see the exact property path and reason for every failure.

Data matches the schema

Supports the common JSON Schema (draft-07-style) keywords: type, required, properties, additionalProperties, items, enum, const, minimum/maximum, exclusiveMinimum/Maximum, multipleOf, minLength/maxLength, pattern, format: email, minItems/maxItems, uniqueItems, allOf, anyOf, and oneOf.

How to validate JSON against a schema

  1. 1

    Paste your JSON Schema on the left — type, required, properties, and the other common draft-07-style keywords are supported.

  2. 2

    Paste the JSON data you want to check on the right.

  3. 3

    Read the pass/fail result and, if it fails, the exact property path and reason for every issue.

Questions

What JSON Schema keywords are supported?
The keywords used in the vast majority of real-world schemas: type, required, properties, additionalProperties, items, enum, const, minimum/maximum, exclusiveMinimum/Maximum, multipleOf, minLength/maxLength, pattern, format: email, minItems/maxItems, uniqueItems, and the allOf/anyOf/oneOf combinators. It doesn't implement every draft-2020-12 keyword (like $ref resolution across files or conditional if/then/else), which covers almost all hand-written API and config schemas.
Why does my data fail even though it looks correct?
The most common cause is a type mismatch that's easy to miss visually — a number written in quotes becomes a string ("29" instead of 29), which fails a schema expecting type: "integer". The issue list always names the exact property path and what type or value was actually found, which should point straight at the mismatch.
What does additionalProperties: false actually enforce?
It rejects any property on the object that isn't explicitly listed in properties — useful for catching typos in field names (like usrname instead of username) that would otherwise silently pass validation as an "extra" field nobody notices.
Is my schema or data sent anywhere?
No — validation runs entirely in JavaScript in your browser tab. Nothing is sent to a server, which matters if your sample data includes real user records or API payloads.