UtilityToolsLab

© 2026 UtilityToolsLab. Built and maintained by the UtilityToolsLab Team.

Free eBooks·About·Changelog·Privacy Policy·Terms of Service·Report a bug
HomeCode & DevSchema Validator

Related Tools

JSON FormatterBase64UUID GeneratorJWT DecoderTimestampRegex TesterRandom JSON GeneratorAPI Load TesterJSON Diff CheckerJSON Path FinderXML FormatterHTML FormatterCSS FormatterCSS MinifierJS MinifierHTTP Status CodesASCII Table

JSON Schema Validator

Check JSON against a draft-07 schema and get every failure with its exact path, plus a list of any keywords this validator did not check.

You Might Also Like

All Code & Dev

JSON Formatter

Paste raw JSON to instantly format, beautify, validate and minify it. Syntax errors are pinpointed by line and column. Free and fully private.

Base64

Encode text or data to Base64 and decode Base64 strings back to readable text. A fast developer utility for API payloads, tokens and data URIs.

UUID Generator

Generate RFC 4122 compliant UUID v4 strings with one click, or batch-generate up to 100 unique IDs at once. Cryptographically random and free.

JWT Decoder

Decode and inspect JSON Web Tokens. View header, payload, and signature. Detects expiry and maps all registered JWT claims.

“Valid” is only worth something if you know what was checked. A validator that meets a keyword it does not implement has two options: skip it quietly, or say so. JSON Schema Validator says so, and that decision shapes the whole tool. There is an amber line under the result listing any keyword found in your schema and not checked, so a green banner never means “valid as far as I bothered to look”.

Paste a draft-07 schema on the left and the document it is supposed to describe on the right. Every failure comes back with an RFC 6901 JSON Pointer to the exact value, the keyword that rejected it, and a sentence naming the number or string that caused the problem, so a report can be pasted into a ticket and acted on without the file beside it.

A Real Example: Six Failures in One Document

The pair on screen at load is a subscription record checked against its schema, and it fails six ways at once: /id is 0 against a minimum of 1, /email has a space where the @ belongs, /plan is "platinum" against an enum of three, /seats is 640 against a maximum of 500, /tags/1 repeats "billing" under uniqueItems, and /region trips additionalProperties: false. Press Load Sample and the next pair is a product record whose sku is "kettle-9", reported as “"kettle-9" does not match ^[A-Z]{3}-[0-9]{4}$.” Note where the pointers land: /dimensions/height names the missing property, not the object that should have contained it.

What It Accepts: Draft-07, Minus What It Admits to Skipping

Twenty-eight keywords are implemented, and the full list is on the page behind a toggle rather than in this paragraph, because the copy in the tool cannot drift away from the code the way this sentence could.

  • Objects: properties, required, minProperties, maxProperties, and additionalProperties in both forms: false to reject extras outright, or a schema every extra key must satisfy.
  • Arrays: items as a single schema or as a tuple, plus minItems, maxItems and uniqueItems, which reports the index of the duplicate rather than only the fact of one.
  • Scalars: minLength, maxLength, pattern and format for strings; minimum, maximum, both exclusive bounds and multipleOf for numbers, with integer kept distinct from number.
  • Composition: allOf, anyOf, oneOf (which counts matches, so it can tell you a value matched two branches when it was meant to match one) and not.
  • References: $ref resolves local pointers such as #/definitions/leg. A remote schema URL is rejected rather than fetched, since nothing here touches the network. Recursion is fine: a tree that refers to # validates its own children, with a 64-level guard so a self-reference terminates instead of hanging the tab.

Precision, Floats, and the multipleOf Trap

Two limits are worth knowing. multipleOf is checked by division with a tolerance of 1e-9, because binary floating point cannot represent 0.01 exactly and a strict remainder test would reject prices that are perfectly good money; that tolerance is why 24.49 passes multipleOf: 0.01 and 24.499 does not. And format is pattern matching, not a parser: email, uri, uuid, date, date-time, time, ipv4 and hostname are recognised at the shape level, so an address can satisfy the check and still bounce. A format the tool does not know is passed rather than failed, which matches the spec’s own treatment of format as an annotation. Each pane holds 200,000 characters.

6 validation errors.
  • /idminimum

    Must be at least 1, found 0.

  • /emailformat

    "priya.raghunathan at northwind.example" is not a valid email.

  • /planenum

    "platinum" is not one of "free", "pro", "enterprise".

  • /seatsmaximum

    Must be at most 500, found 640.

  • /tags/1uniqueItems

    Duplicate of item 0: "billing".

  • /regionadditionalProperties

    Property "region" is not allowed by this schema.