跳到主要内容

JSON 转 Pydantic BaseModel 生成器, 嵌套模型、Optional、v1 / v2

粘 JSON 出 Pydantic BaseModel, 带类型注解、嵌套子模型、List[T]、Optional 推断、v1 / v2 与别名。

  • 本地处理
  • 分类 格式转换
  • 适合 把粘贴内容或本地文件转成更适合交付的格式。
示例:
类型、Optional 和嵌套模型是怎么推断的

每个 JSON 对象生成一个 Pydantic BaseModel。整数推断成 int; 带小数的推断成 float; 一个数字有时是整数有时带小数, 字段会放宽到 float。嵌套对象生成自己的子 BaseModel, 名字取 key 的 PascalCase, 排在父模型之前输出, 文件里没有前向引用。对象数组会折叠成一个模型 —— 某些元素缺的 key (或值为 null) 会变成 Optional。只出现过 null 的值推断成 Optional[Any]。不是合法 Python 标识符的 key 会转成 snake_case, 原始 key 用 Field(alias=...) 保留, 并打开 populate_by_name, 这样用字段名也能构造模型。可在 Optional[X] 和 X | None 之间切换, 也可在 v1 和 v2 的配置写法之间切换。

这个工具能做什么

把任意 JSON, REST API 响应、webhook body、config.json 或测试 fixture, 粘进来, 拿到一组带完整类型注解的 Pydantic 模型, 可以直接拖进 .py 文件。 类型是推断出来的, 不是一锅端: 整数样本是 int, 带小数的是 float, 一个 字段在某个样本里是整数、在另一个里带小数时会放宽到 float, 这样模型不会 拒掉一行合法数据。true 和 false 是 bool, 字符串是 str, 只出现过 null 的 值是 Optional[Any]。嵌套对象会抽成各自的子 BaseModel, 名字取 key 的 PascalCase, 并排在父模型之前输出, 文件从上到下读、没有任何前向引用。 对象数组会折叠成一个共享模型, 所以第二个元素多带一个 key 的列表, 出来 是一个把那个 key 标成 Optional 的模型, 而不是两个几乎重复、要你手动对齐 的类。不是合法 Python 标识符的 key 会清洗成 snake_case, 原始 key 用 Field(alias=...) 保留。可在 Optional[X] 和 X | None 之间切换, 也可在 Pydantic v1 和 v2 之间切换, 根模型名可改, 一键复制或分享。全部在浏览器 里跑, JSON 不碰服务器。

工具细节

输入
文本 + 数值 + 结构化内容
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 下载
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
浏览器本地处理
主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 9 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
格式转换 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

JSON 转 Pydantic 适合怎么用

适合把内容从一种实际格式转成另一种可用格式。

适合转换的任务

  • 把粘贴内容或本地文件转成更适合交付的格式。
  • 放进大流程前,先预览转换结果是否可靠。
  • 修正常见格式不匹配,不用打开完整编辑器。

转换检查项

  • 源格式比较乱时,先拿一小段试转。
  • 转换后检查编码、分隔符和换行符。
  • 结果确认前保留原始内容。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 JSON 转 Python Dataclass JSON 转 Python, 粘 JSON 出 @dataclass 或 Pydantic v2 模型, 带类型注解, Optional 推断, 嵌套子类, 字段转 snake_case 并保留别名。 打开
  2. 2 JSON 转 TypeScript Interface JSON 转 TypeScript interface, 粘 JSON 出干净 interface, 数组元素合并为 union, 可选字段自动识别, 根类型名可命名。 打开
  3. 3 TypeScript 转 Zod Schema TypeScript interface / type 转 Zod schema, 支持 union / 可选 / 嵌套 / 泛型 / enum / Record / Map / Set, 一键拷贝即用。 打开

真实使用场景

  • 接第三方 API 时不再手写模型

    你在接一个 REST API, user 对象有 30 多个字段。curl 一次拿到响应, 粘 进来, 根名设为 GithubUser, 选 Pydantic v2, 复制输出到 app/clients/github.py。嵌套的 plan 对象自动抽成 Plan, html_url 带上 别名, 现在 GithubUser.model_validate(resp.json()) 给你一个带编辑器 自动补全的类型化对象, 而不是一个靠字符串索引、只能祈祷的原始 dict。

  • 给 FastAPI endpoint 生成请求和响应模型

    同事发来他在做的 /orders POST 的一个 JSON body 样例。粘进来, 根名 CreateOrderRequest, 选 Pydantic v2, FastAPI 就会自动校验 body。响应 样例也粘进来命名 CreateOrderResponse。把两个都放进 schemas.py, 接到 路由签名上, OpenAPI 文档和 422 校验就白送了, 在你们任何一方写 handler 之前。

  • 给可空的 webhook payload 决定用 Optional 还是必需

    某第三方的 webhook 有时带 cancelled_at, 有时不带。把前几次 payload 记下来, 作为 JSON 数组粘进来, Optional 识别会把 cancelled_at 标成 Optional[str] = None。在 handler 里判断 cancelled_at is not None, 就能 干净地区分已取消的事件和仍有效的事件, 而真正必需的字段缺了, Pydantic 会直接报错, 不会等到三层调用之后才抛 KeyError。

  • 把 dict[str, Any] 替换成真正的模型

    老代码是 data = resp.json(), 然后用 data["user"]["profile"]["id"] 一层层挖, 一旦某个 key 改名就在运行时炸。抓一个有代表性的响应粘进来, 生成模型, 替换掉 dict。坑过你的字符串索引变成属性访问, 比如 data.user.profile.id, mypy 或 Pyright 在编辑时就抓出拼写错误, 而不是 等到生产环境。

常见踩坑

  • 粘一个对象进来然后期待某些字段是 Optional。单个对象没有「key 缺失」信号, 所以所有字段都是必需、不带 = None。Optional 推断只在多个对象组成的数组里 (有的元素带某个 key、有的不带), 或值字面就是 null 时生效。把一个样本包成 [ ... ] 就能探索可选性。

  • 给别名配置选错了 Pydantic 版本。v2 写的是 model_config = ConfigDict(populate_by_name=True), v1 写的是嵌套 class Config 里的 allow_population_by_field_name = True。如果你把 v2 输出复制进一个钉死在 pydantic 1.x 的项目, ConfigDict 的 import 会失败。让版本下拉框和 requirements 里的 pydantic 对上。

  • JSON 里有时带小数却把 float 字段手动改窄成 int。如果一个样本是 1、另一个是 1.5, 字段会正确放宽到 float。改窄成 int 会让 Pydantic 拒掉 1.5 那一行。相信放宽, 因为 JSON 的 1 在 Python 里本来就是合法的 float。

  • 粘 JSON5、带注释的 JSON 或末尾逗号。工具用严格的 JSON.parse, 注释、不带引号的 key、末尾逗号都会带着行和列报错。先剥掉, 或者先过一道 JSON 格式化工具。

隐私说明

你粘进来的 JSON 不会离开这个浏览器标签页。解析和类型推断走浏览器内建的 JSON.parse, 没有任何网络请求, 也不对文本框内容做 analytics。分享链接会把 你的输入和根模型名编码进 URL 以便复现结果, 也就是说由你决定何时分享。如果 payload 敏感, 比如内部 ID、客户数据或生产响应, 直接复制生成的 Python 代码, 不要分享链接。只有选项选择, 也就是 Pydantic 版本和 Optional 写法, 会存进 localStorage, 让你偏好的风格在多次访问之间保留。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-06-13