オブジェクト配列の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エンドポイントからユーザーリストを取得し、処理前に配列内のすべての要素が期待されるスキーマに一致することを検証する必要がある場合に使用します。

試してみる — JSON to Zod Schema

フルツールを開く