Valid JSON means the syntax is correct — balanced braces, quoted keys, proper types. But syntax isn't meaning. An API might return an object with a string where a number should be, or omit a required field entirely, and a syntax validator would pass it happily. JSON Schema closes that gap: it's a JSON document that describes what valid data looks like, and a validator can check any instance against it.
A schema in practice
Here's a minimal schema for a user object:
- The schema declares "type": "object" and "required": ["id", "email"].
- Each property is typed: id must be an integer, email a string with a format hint, age an integer between 13 and 120.
- Additional properties are allowed unless "additionalProperties": false is set.
An instance like {"id": "abc", "email": "ada@example.com"} fails immediately: id has the wrong type. That single check catches a whole class of integration bugs before they reach the UI.
Where JSON Schema earns its keep
- API contracts — validate request bodies at the edge so bad data fails fast with a useful message.
- Documentation — a schema is human-readable documentation that never goes stale because it's also the test.
- Form generation — schemas can drive dynamic forms (fields, defaults, validation rules) for admin panels and configurators.
- Data interchange — when you ingest third-party data, a schema check turns silent garbage into a clear error.
When it's overkill
For small internal payloads you control on both ends, a full schema adds ceremony without much payoff. And JSON Schema validates structure, not business rules — a schema can say age is 13–120, but it can't know that a discount code expired. Use it as one layer, not the only layer.
Draft versions matter
JSON Schema drafts (2020-12, 2019-09, draft-07…) differ in keywords and behavior. Make sure your validator and your schema declare the same draft, or the same schema can pass in one tool and fail in another.
Validate a schema or an instance
Paste a JSON document into ForgePlug's JSON Validator to confirm it's syntactically sound before you write the schema around it.
Open JSON Validator