OneFreePlace/ Dev Tools / JSON Schema Validator
Tool #340JSON Schema100% localExact large integersLocal $ref packs

JSON Schema Validator

Validate JSON against modern schemas without surrendering precision or privacy. Load a whole schema pack, resolve local references, preserve integers beyond JavaScript’s safe range, validate documents or records in bulk, and inspect every failure with exact instance and schema pointers.

Readyload a schema and JSON
JSON Schema
Draft auto-detection + local reference resolution
Drop one or more .json / .schema.json files here, or . If there are several files, choose the root schema above and the rest become local references.
JSON data
One document · exact numeric tokens preserved
Drop a .json / .jsonl / .ndjson file here, or . Validation runs entirely in this browser.
Documents—
Valid—
Errors—
Schema issues—
Dialect—
$refs resolved—
Exact big ints—
Validation time—

Validation controls

Defaults favor correctness and useful diagnostics. Format assertions are explicit because Draft 2020-12 treats format as annotation unless a validator chooses assertion semantics.

Strict schema auditWarn about unknown keywords and dialect mismatches before instance validation.
Auto-validate editsRe-run after short edits; very large pasted payloads wait for Validate now.

Local-reference policy

References are resolved from the root schema, nested $id resources, anchors and files you explicitly load. Remote schemas are never fetched behind your back.

No schema pack loaded yet.
No uploadNo remote $ref fetchDraft-awareLossless numbersBatch JSONL

Validation result

✓

Ready to validate

The example is loaded. Validate to see exact instance paths, schema paths and audit findings.

Exportable evidence

Create a portable validation record for debugging, CI handoff or issue tracking. Exports contain diagnostic metadata and value previews, not a hidden cloud copy of your source data.

Errors & schema audit

Search validation failures, inspect exact pointers, and review schema-level warnings before shipping.

DocInstance pointerKeywordMessageSchema location
Validate to populate the error navigator.

Selected error

Status
Select a validation error to inspect it.

Document results

•
Validation has not run yet.
—

Schema audit

✓
Waiting for schema
Audit results appear after validation.
—

Reference map

Total refs—
Resolved—
External files—
Dynamic—
•
No schema pack loaded.
—

Validate the contract, not just the syntax.

This tool separates three questions that are often mixed together: is the schema itself coherent?, can every reference be resolved?, and does the JSON instance satisfy the resulting contract? You get a distinct audit trail for each layer.

Recommended workflow

  1. Paste a root JSON Schema or load a schema pack. If several files are loaded, choose the root file; sibling files become local reference resources.
  2. Leave Schema dialect on Auto when your schema declares $schema. Force a draft only when validating legacy material that lacks a declaration.
  3. Load one JSON document, treat a root array as independent records, or validate JSON Lines / NDJSON record-by-record.
  4. Run validation. Fix schema audit errors first, then use the error navigator to inspect instance pointers and the exact schema location responsible for each failure.
  5. Export the report when you need reproducible evidence for a developer, CI ticket, API provider or data-quality workflow.

Dialects

Draft 2020-12, Draft 2019-09 and Draft-07 have materially different array and reference behavior. Draft 2020-12 uses prefixItems for tuples and changed items; Draft 2019-09 and Draft-07 still support array-form items. The audit warns when a schema uses a keyword that its selected dialect will ignore.

Local $ref packs

Load all related schema files together. Relative file references such as common.schema.json#/$defs/id, absolute $id resources, JSON Pointer fragments, $anchor, Draft 2020-12 $dynamicRef/$dynamicAnchor, and Draft 2019-09 recursive references are resolved locally. For privacy and reproducibility, this tool does not fetch missing remote schemas from the internet.

Exact large integers

Most browser JSON tooling silently rounds integers above 9,007,199,254,740,991. OneFreePlace keeps the original numeric token and performs integer, range, enum, const, uniqueness and multipleOf checks with exact decimal arithmetic. IDs such as 9007199254740993123456789 are therefore not changed before validation.

Format semantics

In modern JSON Schema, format can be annotation-only unless format assertion is explicitly enabled. The Formats control makes that decision visible. When enabled, this standalone version asserts common formats including date, time, date-time, duration, email, hostname, IPv4, IPv6, UUID, URI, URI-reference, regex, JSON Pointer and relative JSON Pointer. Unknown format names remain annotations and produce an audit warning instead of a false rejection.

Smart vs complete errors

Smart mode reduces combinator noise by showing the parent anyOf/oneOf failure plus the closest branch. Complete mode includes branch failures for deep debugging. Either mode preserves JSON Pointer instance paths and schema locations.

Batch modes

Root array = records validates each array element independently against the root schema. JSON Lines validates each non-empty line as a separate document and records its source line. This is different from validating the root array itself as one JSON instance.

Privacy and limits

Parsing, reference resolution, schema auditing, validation and report generation run locally in your browser. No account is required. The validator intentionally refuses unresolved remote references instead of silently making network requests. Custom vocabularies and unknown format names are treated as annotations unless they use supported standard validation keywords.

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["id"],
  "properties": {
    "id": { "type": "integer", "minimum": 9007199254740993 },
    "email": { "type": "string", "format": "email" }
  },
  "additionalProperties": false
}