验证 JSON 数据对应用可靠性至关重要。本指南对比最流行的验证方案。
为什么需要验证 JSON?
没有验证,无效数据可能:
JSON Schema
JSON 验证的官方标准:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": { "type": "string", "minLength": 1 },
"email": { "type": "string", "format": "email" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["name", "email"]
}
优点: 语言无关、标准规范、适合 API 文档
缺点: 冗长、简单场景过于复杂Zod (TypeScript)
import { z } from 'zod';const UserSchema = z.object({
name: z.string().min(1),
email: z.string().email(),
age: z.number().int().positive().optional()
});
const user = UserSchema.parse(input);
// 类型安全的输出!
优点: TypeScript 集成、简洁、出色的错误信息
缺点: 仅限 JavaScript/TypeScriptJoi (Node.js)
const Joi = require('joi');const schema = Joi.object({
name: Joi.string().required(),
email: Joi.string().email(),
age: Joi.number().integer().min(0)
});
const { error, value } = schema.validate(input);
优点: 丰富的 API、成熟稳定、详细的错误信息
缺点: 侧重 Node.js、包体积较大Ajv (JSON Schema 验证器)
const Ajv = require('ajv');
const ajv = new Ajv();
const valid = ajv.validate(schema, data);
if (!valid) console.log(ajv.errors);
优点: 最快的 JSON Schema 验证器、符合标准
缺点: 仅支持 Schema、无 TypeScript 推断选择验证器
| 需求 | 最佳选择 |
|------|---------|
| API 契约 | JSON Schema + Ajv |
| TypeScript 项目 | Zod |
| Express/Hapi 服务器 | Joi |
| 最大性能 | Ajv |
| 客户端表单 | Zod (配合 React Hook Form) |
始终使用我们的 JSON 验证器 作为第一步来验证 JSON 数据。