JSON 转 Dart 工具
根据一个 JSON 对象或一组对象示例,生成无需第三方依赖的 Dart 模型类。转换器会合并所有示例项、创建嵌套类、保留原始 JSON 键,并生成可靠的空安全字段类型及 fromJson 工厂构造函数。如需与 jsonEncode 兼容的输出,还可添加 toJson 方法。示例和生成的代码只保留在当前浏览器中,不会上传或写入 URL。
工作原理
-
1
粘贴有代表性的示例
使用一个 JSON 对象或对象数组。提供多个元素有助于识别缺失字段、可空字段和混合类型字段。
-
2
选择 Dart 选项
设置根类名称,选择是否让所有字段可空,并根据需要添加 toJson 方法。
-
3
检查并导出
检查推断出的类,然后复制代码或将 models.dart 文件下载到本地。
JSON 如何变为空安全的 Dart 模型
Dart 官方的dart:convert 文档说明,jsonDecode() 会生成与 JSON 兼容的值,例如数字、字符串、布尔值、null、列表以及以字符串为键的映射。模型类不能直接编码为 JSON,但 jsonEncode() 可以调用类的 toJson() 方法。本转换器无需添加 json_serializable 注解或第三方包,即可生成这种手动序列化代码。
假设示例中有一个包含嵌套地址的用户。生成的 User 会包含 final 字段和使用命名参数的构造函数。User.fromJson(Map<String, Object?> json) 会转换标量值,并对嵌套对象调用 UserAddress.fromJson()。如果任一示例对象缺少 address 或其值为 null,该字段的类型会变为 UserAddress?,工厂构造函数会先检查 null,再创建对象。启用 toJson 后,嵌套模型会递归转换为 jsonEncode() 可接受的映射。
| JSON 中观察到的值 | 生成的 Dart 类型 |
|---|---|
| 整数 | int |
| 小数 | double |
| 同时有整数和小数示例 | num |
| 文本 | String |
| 布尔值 | bool |
| 嵌套对象 | 生成的模型类 |
| 类型一致的数组 | List<T> |
| 空的或类型不兼容的嵌套数组 | List<Object?> |
| 只有 null 或值类型冲突 | Object? |
转换器会检查根数组中的每个对象,而不是只依据第一个元素。如果某个字段在任一元素中缺失或明确为 null,该字段就会成为可空类型。如果实际 API 比示例更不稳定,也可以选择让所有字段都可空。Dart 空安全指南指出,类型默认不可为 null,需要添加 ? 才能接受 null。
标识符处理和推断限制
JSON 键不必是有效的 Dart 成员名称。工具会移除标点,将单词转换为 lowerCamelCase,为保留字添加安全后缀,并在名称冲突时添加稳定的数字后缀。原始键在 json['original-key'] 和 toJson() 映射中保持不变。嵌套类名使用完整路径,因此互不相关的地址对象不会在不知情的情况下合并为同一个类。
单个示例无法证明完整的 API 约定。JSON 字符串不会自动识别为日期、UUID 或 enum,空数组也无法提供元素类型。对象成员名称重复时也不能保证往返转换安全,因为 JSON 解析器通常只保留最后一个值。投入生产环境前,请根据 API 文档或 schema 检查生成的模型。工具会限制输入大小、嵌套深度、推断出的声明数量和输出大小,使浏览器处理量保持在可控范围内。
常见问题
不会。解析、推断、代码生成、复制和下载都在浏览器中完成。JSON 和生成的 Dart 代码不会发送到我们的服务器,也不会写入 URL。
可以。Flutter 使用 Dart,因此这些无需第三方依赖的类可以用于 Flutter 项目。请先根据实际 API 约定检查推断出的类型。
不会。工具会生成手动 fromJson 和可选的 toJson 方法,不依赖任何第三方包或 build_runner。
观察到值为 null 或缺失的字段会成为可空类型。如果示例不能充分代表实际数据,也可以选择让所有生成的字段都可空。
不能。结果只反映已经观察到的值。请使用多个对象示例,并将结果与提供方的 schema 或文档进行比较。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- Trình chuyển JSON sang Dart [VI]
- محول JSON إلى Dart [AR]
- Convertisseur JSON vers Dart [FR]
- Konverter JSON ke Dart [ID]
- JSON-in-Dart-Konverter [DE]
- JSON to Dart 변환기 [KO]
- JSON till Dart-konverterare [SV]
- JSON-naar-Dart-converter [NL]
- ตัวแปลง JSON เป็น Dart [TH]
- Konwerter JSON na Dart [PL]
- JSONからDartへの変換ツール [JA]
- Conversor de JSON para Dart [PT]
- Conversor de JSON a Dart [ES]
- JSON to Dart Converter [EN]
- Convertitore da JSON a Dart [IT]
- Конвертер JSON в Dart [RU]
- JSON'dan Dart'a Dönüştürücü [TR]