# @alcyone-labs/zod-to-json-schema 中文文档

规范地址：https://npmcn.com/package/%40alcyone-labs/zod-to-json-schema/

版本：4\.0\.10
npm 元数据更新时间：2025-07-25T13:53:43.376Z
中文译文更新时间：2026-11-05T17:44:30.759Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40alcyone-labs/zod-to-json-schema
原文对照：https://npmcn.com/package/%40alcyone-labs/zod-to-json-schema/?lang=original
项目主页：https://github.com/alcyone-labs/zod-to-json-schema#readme
源码仓库：https://github.com/alcyone-labs/zod-to-json-schema

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：369 kB，138 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- peer 依赖：zod ^4\.0\.5
- 首次发布：2025-07-25T13:32:48.199Z
- 最新版本发布：2025-07-25T13:53:43.196Z
- 近 30 天下载量：162605（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：2（近 12 个月 0 个）

## 中文简介

将 Zod schemas 转换为 Json Schemas (升级为 Zod V4)

## 安装

```sh
npm install @alcyone-labs/zod-to-json-schema
```

也可以使用：`pnpm add @alcyone-labs/zod-to-json-schema`、`yarn add @alcyone-labs/zod-to-json-schema`、`bun add @alcyone-labs/zod-to-json-schema`

## README

# 佐德呼叫杰森·斯克马

[![NPM Version](https://img.shields.io/npm/v/@alcyone-labs/zod-to-json-schema.svg)](https://npmjs.org/package/@alcyone-labs/zod-to-json-schema) [![NPM Downloads](https://img.shields.io/npm/dw/zod-to-json-schema.svg)](https://npmjs.org/package/zod-to-json-schema)

_寻找完全相反的(Zod V3)? 检查出来 [json-schema- to- zod (韩语)](https://npmjs.org/package/json-schema-to-zod)_

## 内容提要

说明: 这是升级到Zod V4的叉子

做它所说的锡; 转换 [Zod 计划](https://github.com/colinhacks/zod) V4 进入 [JSON 计划](https://json-schema.org/)虽然佐德 [现在在本地支持JSON Schemas](https://zod.dev/json-schema)有些人还需要更新版的图书馆 所以在这里.

-   支持所有相关的策略类型,基本字符串,数字和数组长度验证和字符串模式.
-   解决内部的递归和反复出现的计划 `$ref`编号.
-   支持针对遗产的Open API 3.0规格(3.1支持常规Json Schema).
-   支持 Open AI 严格的模式方案(可选对象属性被需要但无效的属性所取代).

## Zod 版本兼容性

这个图书馆是 **完全兼容 Zod V4** 并保持与大多数Zod V3模式的后向兼容.

### Zod V4 支持 {}

-   **完全兼容** 与 Zod V4 新的内部结构
-   **错误消息** 完全支持 V4 的新错误系统
-   **所有验证类型** 工作(字符串、数字、对象、阵列、联盟等)
-   **元数据和说明** 完全支持
-   **参考资料处理** 为 V4 的系统结构进行了优化

### 后向兼容性

**大多数 Zod V3 代码不会改变** 与这个图书馆和Zod V4. 主要例外有:

#### 打破 Zod V3 更改 → V4

一些Zod V3 API在V4中被移除. 以下是变化和如何迁移:

#### 删除字符串方法( 断开)

-   ❌ `z.string().ip()` • 使用 `z.string().ipv4()` 或者说 `z.string().ipv6()` 或者说 `z.union([z.string().ipv4(), z.string().ipv6()])`
-   ❌ `z.string().cidr()` • 使用 `z.string().cidrv4()` 或者说 `z.string().cidrv6()`

#### 已贬值但仍得到支持(不突破)

-   `z.string().email()` 偏爱 `z.email()` (顶级API)
-   `z.object().strict()` 偏爱 `z.strictObject()`
-   `z.object().passthrough()` 偏爱 `z.looseObject()`
-   `z.string().min(5, { message: "..." })` 偏爱 `z.string().min(5, { error: "..." })`

所有被贬损的方法仍然有效,但可能在未来的Zod版本被去掉.

## 发起人

非常感谢我们的赞助商! 请考虑通过我的 [GitHub 赞助页面](https://github.com/sponsors/StefanTerdell)每一分钱都有帮助,但这些家伙确实超越了..

<table><tbody><tr><td align="center"><p></p><p></p><div><a href="https://www.coderabbit.ai/" rel="nofollow noopener noreferrer"><img alt="CodeRabbit logo" height="45px" src="https://github.com/user-attachments/assets/d791bc7d-dc60-4d55-9c31-97779839cb74" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a></div><br>将代码审查时间和错误减半( B)<br><a href="https://www.coderabbit.ai/" rel="nofollow noopener noreferrer">密码兔子.ai</a><p></p><p></p></td></tr><tr><td align="center"><p></p><p><a href="https://retool.com/?ref=stefanterdell&amp;utm_source=github&amp;utm_medium=referral&amp;utm_campaign=stefanterdell" rel="nofollow noopener noreferrer"><img alt="stainless" height="45px" src="https://github.com/colinhacks/zod/assets/3084745/5ef4c11b-efeb-4495-90a8-41b83f798600" loading="lazy" decoding="async" referrerpolicy="no-referrer"></a><br>构建 AI 应用程序和工作流程 <a href="https://retool.com/products/ai?ref=stefanterdell&amp;utm_source=github&amp;utm_medium=referral&amp;utm_campaign=stefanterdell" rel="nofollow noopener noreferrer">重装AI工具</a><br><a href="https://retool.com/?ref=stefanterdell&amp;utm_source=github&amp;utm_medium=referral&amp;utm_campaign=stefanterdell" rel="nofollow noopener noreferrer">retool.com (英语)</a></p><p></p></td></tr></tbody></table>

## 使用量

### 基本实例

```typescript
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";

const mySchema = z
  .object({
    myString: z.string().min(5),
    myUnion: z.union([z.number(), z.boolean()]),
  })
  .describe("My neat object schema");

const jsonSchema = zodToJsonSchema(mySchema, "mySchema");
```

#### 预期产出

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$ref": "#/definitions/mySchema",
  "definitions": {
    "mySchema": {
      "description": "My neat object schema",
      "type": "object",
      "properties": {
        "myString": {
          "type": "string",
          "minLength": 5
        },
        "myUnion": {
          "type": ["number", "boolean"]
        }
      },
      "additionalProperties": false,
      "required": ["myString", "myUnion"]
    }
  }
}
```

## 选项

### Schema 名称

可以通过一个字符串作为主zodToJsonSchema函数的第二个参数. 如果您这样做, 您的计画将最终在定义中 对象属性在根上并从中引用 。 或者,你可以通过名称作为 `name` 选项对象的属性(见下文).

### 选项对象

而不是计划名称(或无),你可以通过一个选项对象作为第二个参数. 有以下备选方案:

| 选项 | 效果 |
| --- | --- |
| **名称**? _字符串_ | 如上所说. |
| **名称战略**"ref" \\"标题" | 添加名称为"title" meta, 而不是如上所述作为参考 |
| **基盘**: 字符串 \[\] | 根参考构建器的基础路径. 默认为 \["#"\]. |
| **战略**"根""根""相""相""相""相""相""相""相" | 参考构建者战略;
-   **"根"(根)** 解决从根起的$refs, e:"#/定义/mySchema".
-   **"相对的"** 用途 [相对 JSON 指针](https://tools.ietf.org/id/draft-handrews-relative-json-pointer-00.html)。 。 。 . _看到已知的问题了!_
-   **"见"** 重复任何"见"Zod schema的输出. 在理论上,它是"无"的更能表现的版本,但在实践中,这种行为会给被窝住的计谋带来问题,现在有了自己的选择.
-   **没有** 忽略了所有引用, 创建一个新的 schema 分支, 甚至在 " Seen" schemas上。 递归引用默认为"Any", ie `{}`。 。 。 .

默认为"根". |
| **效果战略**"输入" \\"任何" | 效果产出战略。 默认"输入". _看到已知的问题了!_ |
| **日期战略**?:"format:date""format:date-time""弦""整数" | 日期策略,整数允许在unix-time分秒和最大值中指定. "format:date"创建了有格式的字符串计划:"date". "format:date-time"创建了有格式的字符串计划:"date-time". "字符串"被编为"format:date-time". “ 整数” 创建了带有“ unix- time” 格式的整数计划( 除非目标“ open Api3” 也被尊重 ) |
|  |  |
| **电子邮件战略**?: “格式: 电子邮件” qq“格式: idn- 电子邮件” qq“ pattern: zod” | 选择如何处理电子邮件字符串检查 。 默认为"format:email". |
| **基础64 战略**?: “格式: 二进制” ===================================================================================================================================================================================================================================================== | 选择如何处理 Base64 字符串检查 。 默认为描述的“ 内容编码: base64 ” [这里](https://json-schema.org/understanding-json-schema/reference/non_json_data#contentencoding),注意"format:binary"在输出类型中没有表示,因为它不是JSON Schema spec的一部分,而只是打算在瞄准OpenAPI 3.0时使用. 后来版本的OpenAPI支持内容Encoding. |
| **定义**:"定义""$defs" | 名称传递时定义属性的名称 。 默认为"定义". |
| **目标**:"jsonSchema7" "jsonSchema2019-09" "开Api3" "开Ai" | 目标是哪个 默认为"jsonSchema7" |
| **严格**\*:布尔 | 任何类似Json计划的工会 `{}` 或者说 `true`. 多种zod类型可能出于必要而产生这些类型,例如:z.intanceof() |
| **定义**?: 记录<字符串, ZodSchema> | 见下文单独一节 |
| **错误**\*:布尔 | 包含通过链式函数检查为所支持的zod类型创建的自定义错误消息 。 见下文一节 |
| **缩放**\*:布尔 | 副本 `description` 元为 `markdownDescription` |
| **模式战略**"逃出" \\"保留" | Zod 字符串验证 `.includes()`, (中文(简体) ), `.startsWith()`,以及 `.endsWith()` 必须与 JSON Schema 兼容 `pattern`。为了安全起见,所有非幽灵字符都是 `escape`d 默认(考虑) `z.string().includes(".")`),但这偶尔会给Unicode-flaggex regex解析器造成问题. 使用 `preserve` 来防止这种逃脱行为,并保留准确的字符串,即使它会导致不准确的正则克克. |
| **应用Regex旗**\*:布尔 | 杰森·斯克马 `pattern` 不支持 RegExp 旗帜,但Zod's `z.string().regex()` 已经 当此选项为真( 默认假) 时, 要将 regex 转换成旗下独立形式( 例如 ) . `/x/i => /[xX]/` ) (中文(简体) ). 支持的旗帜 : `i` (只有基本拉丁语), `m`, (中文(简体) ), `s`。 。 。 . |
| **管道战略**"所有" "输入" "输出" | 决定使用时应包括哪些类型 `z.pipe`,例如 `z.string().pipe(z.number())` 将会归还两个 `string` 财务报告和审定财务报表 `number` 默认,仅限 `string` 仅限输入 `number` 用于"输出". |
| **额外战略**:"通过" \\"严格" | 决定何时 `additionalProperties` 应允许。 详情见关于其他属性的部分. |
| **允许的额外财产**? `true` | `undefined` | 给予什么价值 `additionalProperties` 当允许。 详情见关于其他属性的部分. |
| **被拒绝的额外收益**? `false` | `undefined` | 给予什么价值 `additionalProperties` 当被拒绝时。 详情见关于其他属性的部分. |
| **覆盖**\*: 回调 | 见节 |
| **后处理**\*: 回调 | 见节 |
| **打开 AiAnyTypeName**: 字符串 | 决定一个用于允许Open AI结构输出中的半任意值的Json schema的名称. 如果Zod-schema中的任何值能解决任何“任何”类型的计划,它将参考这个名称的定义。 如果没有提供这种定义,将使用默认的Json计划。 默认为“ OpenAiAnyhType ” |

### 定义

定义选项允许您在定义中手动添加重复的策略,用于更清洁的产出。 它与被命名的"计划",被更改的定义路径和基础路径完全相容. 这里有一个简单的例子:

```typescript
const myRecurringSchema = z.string();
const myObjectSchema = z.object({ a: myRecurringSchema, b: myRecurringSchema });

const myJsonSchema = zodToJsonSchema(myObjectSchema, {
  definitions: { myRecurringSchema },
});
```

#### 结果

```json
{
  "type": "object",
  "properties": {
    "a": {
      "$ref": "#/definitions/myRecurringSchema"
    },
    "b": {
      "$ref": "#/definitions/myRecurringSchema"
    }
  },
  "definitions": {
    "myRecurringSchema": {
      "type": "string"
    }
  }
}
```

### 错误消息

此特性允许可选地包含通过链条函数创建的错误消息, 要求支持的zod类型 :

```ts
// string schema with additional chained function call checks
const EmailSchema = z.string().email("Invalid email").min(5, "Too short");

const jsonSchema = zodToJsonSchema(EmailSchema, { errorMessages: true });
```

#### 结果

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "string",
  "format": "email",
  "minLength": 5,
  "errorMessage": {
    "format": "Invalid email",
    "minLength": "Too short"
  }
}
```

这样可以提供具体字段的、验证步骤的具体错误信息,这些错误信息可用于构建表格。 此格式为 `react-hook-form`'ajv 解析器(及其) `ajv-errors` 它用在引擎盖下。 注意如果使用此格式的 AJV 需要 [启用 `ajv-errors`](https://ajv.js.org/packages/ajv-errors.html#usage) 由于 Vanilla AJV 默认不接受此格式.

#### 自定义错误信件支持

-   ZodString 键盘
    -   正则
    -   分钟,最大
    -   电子邮件、 cuid、 uuid、 url
    -   结束于,起于
-   Zod 数字
    -   分钟,最大,它,lte,gt,gte,
    -   单位
    -   倍数
-   ZodSet 软件
    -   分钟,最大
-   佐德阵列
    -   分钟,最大

### 其他属性

默认情况下,Zod在解析对象计划时会去除未申报属性. 为了复制此行为的预期输出, ZodToJsonSchema 的默认行为设置 `"additionalProperties"` 改为 `false` (虽然这一点的正确性可以辩论). 如果您希望允许未申报的属性,您也可以:

-   设定 `removeAdditionalStrategy` 改为 `"strict"`。这将允许任何未以 `.strict()`。 。 。 .
-   离开 `removeAdditionalStrategy` 设置为默认值 `"passthrough"`,并添加 `.passtrough()` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}去你的物体计划.

#### 删除 `additionalProperties` 关键词使用 `allowedAdditionalProperties` 和(或) `rejectedAdditionalProperties` 选项.

一些计划定义(例如Google Gen AI API)不允许使用 `additionalProperties` 关键词。 幸运的是, JSON Schema 光谱允许这样做: 留下未定义的关键字 _应_ 其效果与将其设定为真实(如通常的YMMV)相同. 要启用此行为, 请设置选项 `allowedAdditionalProperties` 改为 `undefined`。 。 。 .

将关键词排除在外,即使附加属性为 _没有_ 允许,设置 `rejectedAdditionalProperties` 改为 `undefined` 还有.

_注意 : 如果您的策略被宣布, 以上两个选项将被忽略 `.catchall(...)` ,因为所提供的计划将被取而代之(如果有效)._

#### 预期产出

| `z.object({})` + 选项 | `"additionalProperties"` 价值 |
| --- | --- |
| `.strip()` (默认) | `false` 如果战略是 `"passtrough"`, (中文(简体) ), `true` 若为 `"strict"` |
| `.passtrough()` | `true` |
| `.strict()` | `false` |
| `.catchall(z.string())` | `{ "type": "string" }` |
| `.catchall(z.function())` | `undefined` (功能计划目前无法解析) |

替换 `true` 财务报告和审定财务报表 `false` 页:1 `undefined` 根据 `allowedAdditionalProperties` 和(或) `rejectedAdditionalProperties` 页:1.

### `override`

这个选项需要回调收到Zod schema定义,当前参考对象(包含当前 ref路径和其他选项),一个包含关于wether或未遇到的schema的推导的参数,以及一个强制解析参数.

重要的是: 如果您不想覆盖当前项目, 您必须返回 `ignoreOverride` 符号从索引导出。 这是因为 `undefined` 当您想要将财产排除在产生的 JSON 计划之外时, 是返回的有效选项.

```typescript
import zodToJsonSchema, { ignoreOverride } from "zod-to-json-schema";

zodToJsonSchema(
  z.object({
    ignoreThis: z.string(),
    overrideThis: z.string(),
    removeThis: z.string(),
  }),
  {
    override: (def, refs) => {
      const path = refs.currentPath.join("/");

      if (path === "#/properties/overrideThis") {
        return {
          type: "integer",
        };
      }

      if (path === "#/properties/removeThis") {
        return undefined;
      }

      // Important! Do not return `undefined` or void unless you want to remove the property from the resulting schema completely.
      return ignoreOverride;
    },
  },
);
```

预期产出:

```json
{
  "type": "object",
  "required": ["ignoreThis", "overrideThis"],
  "properties": {
    "ignoreThis": {
      "type": "string"
    },
    "overrideThis": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
```

### `postProcess`

接受所有论据 `override` 调回, 调回 `postProcess` callback 也接收生成的 schema. 它应该总是返回 JSON Schema,或 `undefined` 如果你想过滤出来。 与 `override` 召回您无需返回 `ignoreOverride` 如果你对所制作的图案很满意,你只要不改变它.

```typescript
import zodToJsonSchema, { PostProcessCallback } from "zod-to-json-schema";

// Define the callback to be used to process the output using the PostProcessCallback type:
const postProcess: PostProcessCallback = (
  // The original output produced by the package itself:
  jsonSchema,
  // The ZodSchema def used to produce the original schema:
  def,
  // The refs object containing the current path, passed options, etc.
  refs,
) => {
  if (!jsonSchema) {
    return jsonSchema;
  }

  // Try to expand description as JSON meta:
  if (jsonSchema.description) {
    try {
      jsonSchema = {
        ...jsonSchema,
        ...JSON.parse(jsonSchema.description),
      };
    } catch {}
  }

  // Make all numbers nullable:
  if ("type" in jsonSchema! && jsonSchema.type === "number") {
    jsonSchema.type = ["number", "null"];
  }

  // Add the refs path, just because
  (jsonSchema as any).path = refs.currentPath;

  return jsonSchema;
};

const jsonSchema = zodToJsonSchema(zodSchema, { postProcess });
```

#### 使用 `postProcess` 包括实例和其他元a

添加对实例和其他 JSON Schema meta 密钥的支持是该项目最常用的功能。 不幸的是,目前的Zod主(3)对此有相当的厌足支持,因此需要一些用户地黑客. 由于这是一个很常见的用例,我加入了一个帮助器功能,它只是试图将任何描述分析成JSON,并扩展成由此而来的设计.

将您想要添加到输出图中的任意字符串作为描述, 然后导入和使用 `jsonDescription` 作为程序后选项 :

```typescript
import zodToJsonSchema, { jsonDescription } from "zod-to-json-schema";

const zodSchema = z.string().describe(
  JSON.stringify({
    title: "My string",
    description: "My description",
    examples: ["Foo", "Bar"],
    whatever: 123,
  }),
);

const jsonSchema = zodToJsonSchema(zodSchema, {
  postProcess: jsonDescription,
});
```

预期产出:

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "string",
  "title": "My string",
  "description": "My description",
  "examples": ["Foo", "Bar"],
  "whatever": 123
}
```

## 移徙指南:Zod V3 → V4

如果你从Zod V3升级到V4,这里需要做的是:

### 字符串验证更改

#### IP 地址验证

```typescript
// ❌ Zod V3 (removed in V4)
z.string().ip();
z.string().ip("v4");
z.string().ip("v6");

// ✅ Zod V4
z.string().ipv4();
z.string().ipv6();
z.union([z.string().ipv4(), z.string().ipv6()]); // for both
```

#### CIDR 验证

```typescript
// ❌ Zod V3 (removed in V4)
z.string().cidr();
z.string().cidr("v4");
z.string().cidr("v6");

// ✅ Zod V4
z.string().cidrv4();
z.string().cidrv6();
z.union([z.string().cidrv4(), z.string().cidrv6()]); // for both
```

#### 建议: 使用顶级 API

```typescript
// ✅ Zod V4 preferred (more tree-shakable)
z.email();
z.uuid();
z.url();
z.ipv4();
z.ipv6();

// ⚠️ Still works but deprecated
z.string().email();
z.string().uuid();
z.string().url();
z.string().ipv4();
z.string().ipv6();
```

### 对象Schema 更改

```typescript
// ⚠️ Deprecated but still works
z.object({ name: z.string() }).strict();
z.object({ name: z.string() }).passthrough();

// ✅ Zod V4 preferred
z.strictObject({ name: z.string() });
z.looseObject({ name: z.string() });
```

### 错误信件更改

```typescript
// ⚠️ Deprecated but still works
z.string().min(5, { message: "Too short" });

// ✅ Zod V4 preferred
z.string().min(5, { error: "Too short" });
```

### 删除 API 的变通工作

如果您需要支持 IPv4 和 IPv6 (替换旧的) `.ip()` 方法 :

```typescript
// Create a reusable IP validator
const ipSchema = z.union([z.string().ipv4(), z.string().ipv6()]);

// Use in your schemas
const serverSchema = z.object({
  host: ipSchema,
  port: z.number(),
});
```

CIDR 范围:

```typescript
const cidrSchema = z.union([z.string().cidrv4(), z.string().cidrv6()]);
```

### 要意识到的其他更改

#### UUID 验证为更严格

```typescript
// Zod V4 is stricter about UUID format
z.string().uuid(); // Now validates against RFC 9562/4122

// For more permissive UUID-like validation:
z.string().guid(); // Accepts any 8-4-4-4-12 hex pattern
```

#### 基数64URL 无更长时间允许铺设

```typescript
// Zod V4 base64url is stricter (no padding allowed)
z.string().base64url(); // Must be unpadded
```

#### 数量验证更改

```typescript
// Safe integers only
z.number().int(); // Now only accepts safe integers
z.number().safe(); // Deprecated, behaves like .int()

// Recommended: Use the new top-level API
z.int(); // Preferred for integers
```

#### 删除对象方法

```typescript
// ❌ Removed in Zod V4
z.object().nonstrict(); // Use z.object() (default behavior)
z.object().deepPartial(); // No direct replacement (was anti-pattern)

// ⚠️ Deprecated but still works
z.object().strip(); // Use z.object() (default behavior)
```

### 移徙援助人员

为方便迁移,您可以创建这些辅助函数:

```typescript
// Helper for IP validation (replaces old .ip() method)
export const ipAddress = () => z.union([z.string().ipv4(), z.string().ipv6()]);

// Helper for CIDR validation (replaces old .cidr() method)
export const cidrRange = () =>
  z.union([z.string().cidrv4(), z.string().cidrv6()]);

// Helper for flexible UUID validation
export const flexibleUuid = () => z.string().guid(); // More permissive than .uuid()

// Usage in your schemas
const networkSchema = z.object({
  serverIp: ipAddress(),
  allowedRange: cidrRange(),
  sessionId: flexibleUuid(),
});
```

## 已知问题

-   OpenAI目标目前应被视为实验性目标,因为一些选项的组合可能会打破相容性.
-   使用时 `.transform`,返回类型从提供的函数中推断。 换句话说,返回类型没有计划,无法在运行时转换. 目前JSON schema因此会反映Zod schema的输入侧而不一定反映输出(后一aka. `z.infer`) (中文(简体) ). 如果这给您的方案造成问题, 请考虑使用效果策略“ 任何” , 它会允许任何类型的输出 .
-   JSON Schemas除了对象的字符串之外,不支持任何其他密钥类型. 使用时 `z.record` 如果有其他密钥类型,则此选项将被忽略。 这个规则的例外是 `z.enum` 自3.1.1.3起得到支持
-   相对 JSON 指针, 同时发布 [JSON计划草案 2020-12](https://json-schema.org/specification.html),在技术上不是它的一部分。 目前,大多数解决者根本不处理它们.
-   自 v3 起, 对象解析器使用 `.isOptional()` 检查是否应将财产列入 `required` 或无. 这有潜在的危险行为 呼叫 `.safeParse` 与 `undefined`工作围绕,确保你 `preprocess` 和其他效果的回调是纯的,不会产生错误。 在Zod Repo中记录了一个问题,可以 [追踪到这里](https://github.com/colinhacks/zod/issues/1460)。 。 。 .
-   JSON Schema 2020-12版本尚未被官方支持. 然而,您应该能够使用此库来获取2020-12年格式的相容计划,只需更改返回的计划 `$schema` 字段改为:“https://json-schema.org/draft/2020-12/schema#”

## 版本

这个包 _没有_ 跟着语义版本。 这套软件包的主要版本和次要版本反映了与软件包的特征均等 [Zod 软件包](http://npmjs.com/package/zod)。 。 。 .

我将尽力将API突破式的改变保持在绝对最低,但新的特征可能出现为"patches",比如在3.9.1中引入了选项模式.

## 更改日志

[https://github.com/StefanTerdell/zod-to-json-schema/blob/master/changelog.md 互联网档案馆的存檔,存档日期2014-12-21](https://github.com/StefanTerdell/zod-to-json-schema/blob/master/changelog.md)

## 常见问题

### @alcyone-labs/zod-to-json-schema 是什么？

将 Zod schemas 转换为 Json Schemas \(升级为 Zod V4\)

### 如何安装 @alcyone-labs/zod-to-json-schema？

在项目目录运行 npm install @alcyone-labs/zod-to-json-schema，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：zod（^4\.0\.5）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @alcyone-labs/zod-to-json-schema 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @alcyone-labs/zod-to-json-schema 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @alcyone-labs/zod-to-json-schema 可以商用吗？

@alcyone-labs/zod-to-json-schema 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @alcyone-labs/zod-to-json-schema 的下载量有多少？

根据 npm 官方下载统计，@alcyone-labs/zod-to-json-schema 在 2026/10/06 – 2026/11/04 这 30 天内被下载 162,605 次，日均约 5,420 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @alcyone-labs/zod-to-json-schema 还在维护吗？

最新版本 4\.0\.10 发布于 2025/07/25（1\.3 年前）；至今共发布 2 个版本，其中过去 12 个月发布了 0 个；首次发布于 2025/07/25。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

