Paste a schema and some JSON and see every error with its path, keyword and message. Draft 2020-12 core rules. Nothing is uploaded.
To validate JSON against a JSON Schema, paste the schema in the first box and the JSON in the second, and the page lists every error with its instance path, the keyword that failed and a short message. The path is a JSON Pointer, so /tags/1 means the second item of the tags array and an empty path shows as (root). Worked example: the sample schema asks for an integer id of at least 1, an email, unique tags, a role of admin or user and no extra keys. The sample JSON breaks all of that and gives 5 errors: minimum at /id, format at /email, uniqueItems at /tags, enum at /role and additionalProperties at /extra. For a missing required key the path points at the missing property, for example /email, and for an extra key it points at the key.
The page checks type, enum, const, properties, required, additionalProperties as true, false or a schema, patternProperties, propertyNames, minProperties, maxProperties, dependentRequired, items, prefixItems, contains with minContains and maxContains, minItems, maxItems, uniqueItems, minLength, maxLength, pattern, minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, format, anyOf, oneOf, allOf, not and if with then and else. References work when they point inside the schema, such as #/$defs/name, #/definitions/name or #, which allows a schema to refer to itself for trees. The values true and false are accepted as schemas. Lengths count characters, not UTF-16 units, so one emoji is one character. multipleOf compares short decimals exactly, so 0.3 is a multiple of 0.1.
A keyword this page does not check is never skipped silently. Any keyword outside the list above, such as unevaluatedProperties, dependentSchemas, $anchor, $dynamicRef or contentEncoding, is named in the notice and the result reads Partly checked instead of Valid. A misspelled keyword such as minLenght is listed the same way. References to other files or web addresses are not fetched and are reported as a schema problem. Format checking is a switch: on, the formats email, date, date-time, uri, uuid and ipv4 are rules; off, format is only a note, which is the default in the specification. A format name this page does not know, such as hostname, is listed and counted under Rules not checked, so the result reads Partly checked. The email check is deliberately strict: ASCII only, no leading, trailing or doubled dot before the @, and a domain with at least one dot, so a..b@example.com and a@localhost are invalid. A schema that names another draft is checked with 2020-12 rules, and a notice says so.
A pattern uses JavaScript regular expression syntax and matches anywhere in the string unless it starts with ^ and ends with $. A pattern that repeats a group that already repeats, such as (a+)+, can make a match take very long, so it is refused, listed in the table as a schema problem, and the rule is not run. Patterns over 500 characters are also refused. Strings over 10,000 characters are never tested against a pattern, a patternProperties object uses only its first 1,000 patterns, and all pattern tests share one work limit, so a very large check ends as Partly checked with a notice instead of freezing the page. The page stops after 1,000 errors, after 500,000 checking steps, and at 1,000 levels of schema nesting, which catches a $ref that points at itself, and each case is named in the notice. The messages are fixed sentences with numbers and keywords: the text of your JSON is not repeated in them. Everything runs in this tab.
Paste the schema in the first box and the JSON in the second. The result says Valid or Invalid and the table lists each error. With the sample you get 5 errors, one for each rule the JSON breaks.
It is a JSON Pointer to the value that failed, starting from the root of your JSON. /address/zip is the zip key inside address, and /items/0 is the first item of the items array. Keys that contain / are written ~1 and keys that contain ~ are written ~0. (root) means the whole document.
There were no errors, but the schema uses a keyword this page does not check, or a pattern was refused. The notice names them, for example unevaluatedProperties. The JSON may still break those rules, so check them in a full validator.
In draft 2020-12 format is a note unless the validator is told to assert it. The Check formats switch is on by default, so email, date, date-time, uri, uuid and ipv4 are rules here. Turn it off to treat format as a note only.
No. It never fetches anything. A $ref that starts with # and points inside the schema works, such as #/$defs/address. Any other reference is listed as a schema problem and its rule is not checked.
No. The schema and the JSON are processed in your browser and not uploaded. Only the Check formats setting is saved in this browser, never the text.