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
Paste your JSON Schema on the left — type, required, properties, and the other common draft-07-style keywords are supported.
- 2
Paste the JSON data you want to check on the right.
- 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.