オブジェクト配列のJSONをZod配列スキーマに変換する
オブジェクトを含むJSON配列を型付き要素を持つZod z.array()スキーマに変換する方法を学びます。同種配列と異種配列の両方をカバー。
Basic Types
詳細な説明
Zodでの配列の型付け
JSONがオブジェクトの配列を含む場合、コンバーターはすべての要素を検査して配列アイテムの統一スキーマを決定し、z.array()でラップします。
JSON例
{
"users": [
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "editor" },
{ "id": 3, "name": "Carol", "role": "viewer" }
]
}
生成されるZodスキーマ
import { z } from "zod";
const usersItemSchema = z.object({
id: z.number().int(),
name: z.string(),
role: z.string(),
});
const rootSchema = z.object({
users: z.array(usersItemSchema),
});
type UsersItem = z.infer<typeof usersItemSchema>;
type Root = z.infer<typeof rootSchema>;
配列のバリデーションメソッド
Zod配列は強力なバリデーションチェーンをサポートします:
// 最小・最大長
z.array(usersItemSchema).min(1).max(100)
// 空でない配列
z.array(usersItemSchema).nonempty()
// 正確な長さ
z.array(usersItemSchema).length(3)
プリミティブ配列
プリミティブの配列は直接マッピングされます:
| JSON | Zodスキーマ |
|---|---|
[1, 2, 3] |
z.array(z.number()) |
["a", "b"] |
z.array(z.string()) |
[true, false] |
z.array(z.boolean()) |
[1, "two", true] |
z.array(z.union([z.number(), z.string(), z.boolean()])) |
混合型配列
配列に異なる型の要素が含まれる場合、Zodはz.union()を使用してそれらを受け入れます:
const mixedSchema = z.array(
z.union([z.string(), z.number(), z.boolean()])
);
これにより、すべての要素が指定された型のいずれかであることが検証され、柔軟性と安全性の両方が提供されます。
ユースケース
ページネーション付きAPIエンドポイントからユーザーリストを取得し、処理前に配列内のすべての要素が期待されるスキーマに一致することを検証する必要がある場合に使用します。