惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
N
Netflix TechBlog - Medium
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
I
InfoQ
月光博客
月光博客
量子位
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
G
Google Developers Blog
D
DataBreaches.Net
宝玉的分享
宝玉的分享
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
JSON Schema: How to Validate API Responses Before They Br...
Snappy Tools · 2026-05-13 · via DEV Community

If you've ever shipped a bug because an API returned null where you expected a string, you've already experienced the problem JSON Schema solves.

JSON Schema is a vocabulary that lets you describe the structure of your JSON data and validate it automatically. It's been around since 2009 and is now a draft standard under the IETF. If you work with APIs, configs, or any structured JSON, it's worth knowing.

What JSON Schema actually does

A JSON Schema is itself a JSON document that describes what valid JSON looks like. Here's a minimal example:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": ["id", "email"],
  "properties": {
    "id": { "type": "integer" },
    "email": { "type": "string", "format": "email" },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 }
  }
}

Enter fullscreen mode Exit fullscreen mode

This schema says: the JSON must be an object with id (integer) and email (string, email format) as required fields. age is optional but, if present, must be a non-negative integer under 150.

Run any JSON against this schema and you get a pass/fail result with specific error messages.

The core keywords you need to know

Type keywords: "type": "string", "type": "integer", "type": "number", "type": "boolean", "type": "array", "type": "object", "type": "null". You can allow multiple types with an array: "type": ["string", "null"].

String constraints: minLength, maxLength, pattern (regex). For example: "pattern": "^[a-z]{2,3}$" would match a 2–3 character lowercase language code.

Number constraints: minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf.

Array constraints: items (schema for each element), minItems, maxItems, uniqueItems. With uniqueItems: true, duplicate entries fail validation.

Object constraints: properties (per-key schemas), required (list of required keys), additionalProperties (set to false to ban keys not listed in properties).

Combining schemas: allOf, anyOf, oneOf, not. These let you compose complex validation rules from simpler ones.

A real-world example

Say you're calling a payment API that returns transaction objects. You want to catch bad responses before they reach your business logic:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "required": ["transaction_id", "amount", "currency", "status"],
  "properties": {
    "transaction_id": { "type": "string", "minLength": 1 },
    "amount": { "type": "number", "exclusiveMinimum": 0 },
    "currency": { "type": "string", "pattern": "^[A-Z]{3}$" },
    "status": { "type": "string", "enum": ["pending", "completed", "failed", "refunded"] },
    "metadata": { "type": "object" }
  },
  "additionalProperties": false
}

Enter fullscreen mode Exit fullscreen mode

This rejects: zero or negative amounts, currencies that aren't 3-letter ISO codes, statuses outside the defined enum, and any unexpected extra fields.

Where JSON Schema is used

  • API contract testing — validate responses from external APIs before processing
  • Configuration files — VS Code uses JSON Schema to provide autocomplete and inline validation for settings.json, launch.json, and many extension configs
  • Form validation — libraries like Ajv run schema validation client-side
  • CI pipeline checks — validate generated artifacts before deploying
  • OpenAPI specs — OpenAPI 3.x uses JSON Schema for request/response body definitions

Draft versions and compatibility

The most widely supported version is draft-07. Draft-04 is still common in older codebases. Newer drafts (2019-09, 2020-12) add features like $defs, unevaluatedProperties, and prefixItems for tuple validation, but library support is patchy.

If you're starting fresh, use draft-07 — you get broad tool and library support with minimal compatibility headaches.

Validating quickly without writing code

If you want to test a schema against some JSON right now without setting up a project, you can use a browser-based validator. I built one at SnappyTools JSON Formatter for formatting and validating JSON structure — paste your JSON, see errors highlighted instantly, all client-side with no data sent anywhere.

For schema-specific validation (pairing a schema with an instance and seeing which keywords fail), tools like jsonschema.dev and jsonschemavalidator.net are useful references.

The quick takeaway

JSON Schema is the most practical way to add a validation layer between your app and untrusted JSON data. You don't need a library for simple cases — just knowing the keywords lets you write schemas by hand and reason about what JSON your code will accept.

Start with type, required, and properties. Add minimum/maximum for numbers, pattern for strings, and enum for fixed value sets. That covers 80% of real-world validation needs.