JSON Schema Validator
Check data against a schema — paste it or point at a URL. Supports the keywords people actually use; the ones that are missing are listed here rather than silently ignored.
Ctrl / Cmd + Enter formats as well.
Click any { } or [ ] to collapse or expand it. The number beside a bracket is its item count, so an empty array is obvious at a glance. Rendering stops at 5,000 nodes.
Paste JSON into the Format & validate tab first.
Supported: $, .key, ..key (recursive descent), [0] and [*]. That is the subset developers actually use, not the whole JSONPath grammar.
Compared structurally, not as text. Indentation, key order and 1.0 vs 1 are not reported as differences.
The data comes from the input box on the Format & validate tab. Supported: type, required, properties, items, enum, const, numeric bounds, string length and pattern, array length and uniqueness, and additionalProperties. Not supported yet: $ref, allOf/anyOf/oneOf and format.
This is a subset of draft-07, implemented on purpose and declared in full below. It will tell you whether your data matches the shape you described. It will not behave like Ajv: no $ref, no allOf/anyOf/oneOf, no format assertions.
The reason to use a page like this instead of Ajv is not capability. It is that the data never leaves the tab — which matters exactly when the payload is a customer record you should not be pasting into a web service. If you need the full vocabulary, run a real validator in your build.
Implemented
| Keyword | Behaviour |
|---|---|
type | string, number, integer, object, array, boolean, null, or a list of them |
required | missing properties reported by path |
properties / additionalProperties |
nested objects; false rejects undeclared keys |
items | single schema applied to every element |
enum / const | value equality against the list or constant |
minimum / maximum / exclusiveMinimum /
exclusiveMaximum | numeric bounds, draft-07 numeric form |
minLength / maxLength / pattern |
string length and regular expression |
minItems / maxItems / uniqueItems |
array length and element uniqueness |
true / false as a schema |
accept everything / reject everything |
Errors are reported as paths — user.address.zip, not a line number — so you
can map each one to the field it belongs to.
Not implemented, and what that means for you
$ref/definitions— a schema that references another will not resolve. Inline the definition or use a real validator.allOf/anyOf/oneOf/not— combinators are skipped, so a schema built on them will pass things it should not. This is the most likely way to be misled by this page, which is why it is in the headline rather than a footnote.format— ignored. That is spec-conformant for draft-07, whereformatis an annotation unless the implementation elects to assert, but it means"format": "email"will not stop"x".patternProperties,dependencies,if/then/else, tuple-formitems— not handled.
Nothing here guesses. A keyword this page does not implement is not reported as satisfied; it is simply absent from the table above.
Fetching a schema from a URL
The schema box accepts an http(s) URL instead of a
document, which is how you point at a published schema. It will fail more often than you
expect, for one reason: the remote host has to send
Access-Control-Allow-Origin. Most raw-file hosts do not, and a browser will
block the response even though the file is public and loads fine in a tab.
The tool retries three times with a growing delay — a transient failure on a CDN is common enough to be worth it — and then tells you to paste the schema instead. That is the correct fix, not a workaround: pasting also means the fetch never carried your data anywhere, because only the schema URL leaves the tab.
Nothing about your data is sent when you fetch a schema. The request is for the schema document, and the response is the only thing read.
Frequently asked questions
Which JSON Schema draft does this support?
A subset of draft-07. Keywords that draft defines and this page does not implement are listed in the section above; treat anything in that list as unchecked.
Can I give it a URL instead of pasting the schema?
Yes — an http(s) URL in the schema box is fetched, retried up to three times, and used. It only works if the host sends CORS headers, which most file hosts do not.
Does validating send my data anywhere?
No. The only outbound request on this page is the optional schema fetch, and that request contains the schema URL and nothing else. Validation itself runs in the tab.
I used "format": "email" and an invalid address passed. Why?
format is not asserted here, which matches draft-07's default behaviour. If you need format checking, use a validator that opts into it and say so in your schema documentation — several validators disagree about format, so a schema that relies on it is not portable.
What does additionalProperties: false reject?
Any key not listed in properties (and not matched by patternProperties, which this page does not implement). It is the strictest useful setting for API payloads, and the one most likely to break when a producer adds a field — which is arguably the point.