|
| 1 | +# JSON Dart - 完整的 JSON 到 Dart 代码生成解决方案 |
| 2 | + |
| 3 | +<p align="center"> |
| 4 | + <img src="apps/jsond/assets/JSON.png" width="120" alt="JSON Dart Logo"> |
| 5 | +</p> |
| 6 | + |
| 7 | +<p align="center"> |
| 8 | + <strong>🚀 强大、灵活、易用的 JSON 到 Dart 代码生成工具套件</strong> |
| 9 | +</p> |
| 10 | + |
| 11 | +<p align="center"> |
| 12 | + <a href="https://github.com/iota9star/json_dart/releases"><img src="https://img.shields.io/github/v/release/iota9star/json_dart" alt="Release"></a> |
| 13 | + <a href="https://github.com/iota9star/json_dart/blob/main/LICENSE"><img src="https://img.shields.io/github/license/iota9star/json_dart" alt="License"></a> |
| 14 | + <a href="https://github.com/iota9star/json_dart/stargazers"><img src="https://img.shields.io/github/stars/iota9star/json_dart" alt="Stars"></a> |
| 15 | + <a href="https://github.com/iota9star/json_dart/issues"><img src="https://img.shields.io/github/issues/iota9star/json_dart" alt="Issues"></a> |
| 16 | +</p> |
| 17 | + |
| 18 | +## 📖 项目简介 |
| 19 | + |
| 20 | +JSON Dart 是一个完整的工具套件,旨在简化 Flutter 和 Dart 开发中从 JSON 数据生成 Dart 模型类的过程。无论您是在处理 REST API 响应、配置文件,还是数据库记录,JSON Dart 都能为您提供高效、灵活的解决方案。 |
| 21 | + |
| 22 | +### 🎯 核心优势 |
| 23 | + |
| 24 | +- **🎨 多样化模板**: 支持 JsonSerializable、Freezed、Hive、Isar 等主流代码生成框架 |
| 25 | +- **🖥️ 跨平台支持**: 提供 Flutter GUI 应用和命令行工具 |
| 26 | +- **⚡ 高性能解析**: 基于 ANTLR4 的 JSON5 解析器,支持复杂数据结构 |
| 27 | +- **🛠️ 高度可定制**: 支持自定义模板和完全可配置的代码生成规则 |
| 28 | +- **📱 现代化 UI**: 精美的 Material Design 3 界面,支持主题定制 |
| 29 | + |
| 30 | +## 🏗️ 项目架构 |
| 31 | + |
| 32 | +本项目采用 monorepo 架构,包含以下组件: |
| 33 | + |
| 34 | +``` |
| 35 | +json_dart/ |
| 36 | +├── 📱 apps/ |
| 37 | +│ └── jsond/ # Flutter GUI 应用 |
| 38 | +├── 📦 packages/ |
| 39 | +│ ├── core/ # 核心解析和生成库 |
| 40 | +│ └── json/ # 命令行工具 |
| 41 | +└── 🛠️ scripts/ # 构建和工具脚本 |
| 42 | +``` |
| 43 | + |
| 44 | +### 组件说明 |
| 45 | + |
| 46 | +| 组件 | 描述 | 技术栈 | 用途 | |
| 47 | +|------|------|--------|------| |
| 48 | +| **JSON Dart App** | 跨平台 GUI 应用 | Flutter, Material 3 | 可视化 JSON 到 Dart 转换 | |
| 49 | +| **JSON Dart CLI** | 命令行工具 | Dart | 批量处理、CI/CD 集成 | |
| 50 | +| **JSON Dart Core** | 核心库 | Dart, ANTLR4, Mustache | 解析引擎和代码生成 | |
| 51 | + |
| 52 | +## 🚀 快速开始 |
| 53 | + |
| 54 | +### 📋 环境要求 |
| 55 | + |
| 56 | +- **Flutter**: >= 3.32.6 |
| 57 | +- **Dart**: >= 2.18.0 |
| 58 | +- **操作系统**: Windows, macOS, Linux |
| 59 | + |
| 60 | +### 🛠️ 安装方式 |
| 61 | + |
| 62 | +#### 方式一:使用 Flutter GUI 应用 |
| 63 | + |
| 64 | +```bash |
| 65 | +# 克隆项目 |
| 66 | +git clone https://github.com/iota9star/json_dart.git |
| 67 | +cd json_dart |
| 68 | + |
| 69 | +# 安装依赖 |
| 70 | +flutter pub get |
| 71 | + |
| 72 | +# 运行应用 |
| 73 | +flutter run |
| 74 | +``` |
| 75 | + |
| 76 | +#### 方式二:安装命令行工具 |
| 77 | + |
| 78 | +```bash |
| 79 | +# 全局安装 CLI 工具 |
| 80 | +dart pub global activate jsond_cli |
| 81 | + |
| 82 | +# 使用 CLI 工具 |
| 83 | +jsond -p example.json -t freezed -f |
| 84 | +``` |
| 85 | + |
| 86 | +#### 方式三:作为库依赖 |
| 87 | + |
| 88 | +```yaml |
| 89 | +# pubspec.yaml |
| 90 | +dependencies: |
| 91 | + jsond: ^0.1.0 |
| 92 | +``` |
| 93 | +
|
| 94 | +### 🎯 基本用法 |
| 95 | +
|
| 96 | +#### GUI 应用使用 |
| 97 | +1. 启动 Flutter 应用 |
| 98 | +2. 在左侧 JSON 编辑器中输入 JSON 数据 |
| 99 | +3. 从模板列表中选择合适的代码生成模板 |
| 100 | +4. 在右侧查看生成的 Dart 代码 |
| 101 | +5. 点击复制按钮获取代码 |
| 102 | +
|
| 103 | +#### CLI 工具使用 |
| 104 | +```bash |
| 105 | +# 处理单个文件 |
| 106 | +jsond -p data.json -t json_serializable -f |
| 107 | + |
| 108 | +# 批量处理目录 |
| 109 | +jsond -d ./json_files -t freezed -f -r |
| 110 | + |
| 111 | +# 使用自定义模板 |
| 112 | +jsond -p data.json -e custom_template.hbs -f |
| 113 | +``` |
| 114 | + |
| 115 | +#### 程序库使用 |
| 116 | +```dart |
| 117 | +import 'package:jsond/jsond.dart'; |
| 118 | +
|
| 119 | +void main() { |
| 120 | + const json = '{"name": "John", "age": 30}'; |
| 121 | + final dartCode = render(json, freezed, dartFormat: true); |
| 122 | + print(dartCode); |
| 123 | +} |
| 124 | +``` |
| 125 | + |
| 126 | +## 🎨 支持的模板 |
| 127 | + |
| 128 | +### 📝 基础模板 |
| 129 | +- **With Final**: 生成带 `final` 修饰符的基础模型 |
| 130 | +- **No Final**: 生成可变字段的基础模型 |
| 131 | + |
| 132 | +### 🔄 序列化模板 |
| 133 | +- **JsonSerializable**: 使用 `json_annotation` 包 |
| 134 | +- **JsonSerializable + HiveCE**: 结合 Hive 数据库注解 |
| 135 | + |
| 136 | +### ❄️ 不可变模板 |
| 137 | +- **Freezed**: 基础 Freezed 不可变模型 |
| 138 | +- **Freezed + Default**: 带默认值的 Freezed 模型 |
| 139 | +- **Freezed + HiveCE**: 结合 Hive 的 Freezed 模型 |
| 140 | +- **Unfreezed**: 可变的 Freezed 风格模型 |
| 141 | + |
| 142 | +### 🗃️ 数据库模板 |
| 143 | +- **Isar**: 专为 Isar 数据库设计 |
| 144 | +- **Isar + JsonSerializable**: Isar 与序列化结合 |
| 145 | +- **Isar + Freezed**: Isar 与不可变模型结合 |
| 146 | + |
| 147 | +## 💡 功能特性 |
| 148 | + |
| 149 | +### 🔍 强大的解析能力 |
| 150 | +- **JSON5 支持**: 完整支持 JSON5 格式(注释、尾随逗号等) |
| 151 | +- **类型推断**: 智能推断 Dart 数据类型 |
| 152 | +- **嵌套结构**: 完美处理复杂嵌套对象和数组 |
| 153 | +- **空值处理**: 智能识别可空字段和联合类型 |
| 154 | + |
| 155 | +### 🎛️ 灵活的配置 |
| 156 | +- **自定义模板**: 支持 Handlebars 语法的完全自定义模板 |
| 157 | +- **命名规则**: 支持多种命名约定(camelCase、PascalCase、snake_case 等) |
| 158 | +- **关键字处理**: 自动处理 Dart 关键字冲突 |
| 159 | +- **代码格式化**: 集成 `dart format` 自动格式化 |
| 160 | + |
| 161 | +### 🖥️ 用户体验 |
| 162 | +- **实时预览**: JSON 输入时实时生成 Dart 代码 |
| 163 | +- **错误提示**: 详细的 JSON 语法错误信息 |
| 164 | +- **主题定制**: 支持明亮/暗黑主题和自定义配色 |
| 165 | +- **快捷操作**: 丰富的快捷键和工具栏操作 |
| 166 | + |
| 167 | +### 🔧 开发者友好 |
| 168 | +- **批量处理**: CLI 工具支持批量转换多个文件 |
| 169 | +- **CI/CD 集成**: 完美适配持续集成工作流 |
| 170 | +- **Build Runner**: 支持 build_runner 集成 |
| 171 | +- **插件系统**: 可扩展的插件架构(规划中) |
| 172 | + |
| 173 | +## 📚 详细文档 |
| 174 | + |
| 175 | +### 语言版本 |
| 176 | +- 🇨🇳 [中文文档](README.md) (当前文档) |
| 177 | +- 🇺🇸 [English Documentation](README_EN.md) |
| 178 | + |
| 179 | +### 组件文档 |
| 180 | +- 📱 [Flutter 应用文档](apps/jsond/README.md) | [English](apps/jsond/README_EN.md) - GUI 应用完整使用指南 |
| 181 | +- 💻 [CLI 工具文档](packages/json/README.md) | [English](packages/json/README_EN.md) - 命令行工具详细说明 |
| 182 | +- 🔧 [核心库文档](packages/core/README.md) | [English](packages/core/README_EN.md) - API 参考和高级用法 |
| 183 | + |
| 184 | +### 技术指南 |
| 185 | +- 📋 [项目问题分析](PROJECT_ISSUES.md) - 代码质量分析和修复建议 |
| 186 | +- 🎯 [发布日志](CHANGELOG.md) - 版本更新记录 |
| 187 | +- 🔧 [开发指南](CONTRIBUTING.md) - 详细的开发和贡献指南 |
| 188 | + |
| 189 | +## 🎯 使用场景 |
| 190 | + |
| 191 | +### 🌐 API 开发 |
| 192 | +```bash |
| 193 | +# 从 API 响应快速生成模型 |
| 194 | +curl https://api.example.com/users | jsond -t json_serializable -f > lib/models/user.dart |
| 195 | +``` |
| 196 | + |
| 197 | +### 🗄️ 数据库建模 |
| 198 | +```dart |
| 199 | +// 为 Hive 数据库生成类型安全的模型 |
| 200 | +final code = render(schemaJson, jsonSerializableWithHiveCE, dartFormat: true); |
| 201 | +``` |
| 202 | + |
| 203 | +### ⚙️ 配置管理 |
| 204 | +```dart |
| 205 | +// 将配置文件转换为类型安全的 Dart 类 |
| 206 | +final configModel = render(configJson, freezed, dartFormat: true); |
| 207 | +``` |
| 208 | + |
| 209 | +### 🔄 代码生成工作流 |
| 210 | +```yaml |
| 211 | +# build.yaml - 集成到 build_runner 工作流 |
| 212 | +targets: |
| 213 | + $default: |
| 214 | + builders: |
| 215 | + jsond: |
| 216 | + options: |
| 217 | + template: "freezed" |
| 218 | + use_dart_format: true |
| 219 | +``` |
| 220 | +
|
| 221 | +## 🎨 模板示例 |
| 222 | +
|
| 223 | +### 基础模板输出 |
| 224 | +```dart |
| 225 | +class User { |
| 226 | + User(); |
| 227 | + |
| 228 | + factory User.fromJson(Map<String, dynamic> json) { |
| 229 | + return User() |
| 230 | + ..id = json['id'] |
| 231 | + ..name = json['name'] |
| 232 | + ..email = json['email']; |
| 233 | + } |
| 234 | + |
| 235 | + late int id; |
| 236 | + late String name; |
| 237 | + late String email; |
| 238 | + |
| 239 | + Map<String, dynamic> toJson() { |
| 240 | + return { |
| 241 | + 'id': id, |
| 242 | + 'name': name, |
| 243 | + 'email': email, |
| 244 | + }; |
| 245 | + } |
| 246 | +} |
| 247 | +``` |
| 248 | + |
| 249 | +### Freezed 模板输出 |
| 250 | +```dart |
| 251 | +@freezed |
| 252 | +class User with _$User { |
| 253 | + const factory User({ |
| 254 | + required int id, |
| 255 | + required String name, |
| 256 | + required String email, |
| 257 | + }) = _User; |
| 258 | +
|
| 259 | + factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); |
| 260 | +} |
| 261 | +``` |
| 262 | + |
| 263 | +## 🛣️ 发展路线图 |
| 264 | + |
| 265 | +### 🎯 近期目标 (v1.0) |
| 266 | +- [ ] **配置文件支持**: `jsond.yaml` 配置文件 |
| 267 | +- [ ] **增量处理**: 智能检测文件变化,增量更新 |
| 268 | +- [ ] **并行处理**: 多文件并行转换支持 |
| 269 | +- [ ] **插件系统**: 可扩展的插件架构 |
| 270 | + |
| 271 | +### 🚀 中期目标 (v1.5) |
| 272 | +- [ ] **GraphQL 支持**: 从 GraphQL Schema 生成模型 |
| 273 | +- [ ] **TypeScript 支持**: 生成 TypeScript 类型定义 |
| 274 | +- [ ] **IDE 扩展**: VS Code 和 IntelliJ 插件 |
| 275 | +- [ ] **云端服务**: 在线转换服务 |
| 276 | + |
| 277 | +### 🌟 长期愿景 (v2.0) |
| 278 | +- [ ] **多语言支持**: 支持更多编程语言 |
| 279 | +- [ ] **AI 辅助**: 智能模板推荐和代码优化 |
| 280 | +- [ ] **团队协作**: 模板共享和版本控制 |
| 281 | +- [ ] **性能分析**: 代码性能分析和优化建议 |
| 282 | + |
| 283 | +## 📊 性能基准 |
| 284 | + |
| 285 | +### 解析性能 |
| 286 | +| JSON 大小 | 解析时间 | 内存占用 | |
| 287 | +|-----------|----------|----------| |
| 288 | +| 1KB | < 1ms | < 1MB | |
| 289 | +| 100KB | < 50ms | < 10MB | |
| 290 | +| 1MB | < 500ms | < 50MB | |
| 291 | + |
| 292 | +### 生成性能 |
| 293 | +| 对象数量 | 生成时间 | 代码行数 | |
| 294 | +|----------|----------|----------| |
| 295 | +| 1-10 | < 10ms | 50-500 | |
| 296 | +| 11-100 | < 100ms | 500-5K | |
| 297 | +| 100+ | < 1s | 5K+ | |
| 298 | + |
| 299 | +## 🤝 贡献指南 |
| 300 | + |
| 301 | +我们热烈欢迎社区贡献!无论是 bug 报告、功能请求、代码贡献还是文档改进,都非常感谢。 |
| 302 | + |
| 303 | +### 🛠️ 开发环境设置 |
| 304 | + |
| 305 | +```bash |
| 306 | +# 1. Fork 并克隆项目 |
| 307 | +git clone https://github.com/YOUR_USERNAME/json_dart.git |
| 308 | +cd json_dart |
| 309 | + |
| 310 | +# 2. 安装依赖 |
| 311 | +flutter pub get |
| 312 | + |
| 313 | +# 3. 运行测试 |
| 314 | +flutter test |
| 315 | + |
| 316 | +# 4. 创建功能分支 |
| 317 | +git checkout -b feature/amazing-feature |
| 318 | + |
| 319 | +# 5. 提交更改 |
| 320 | +git commit -m "feat: add amazing feature" |
| 321 | + |
| 322 | +# 6. 推送分支 |
| 323 | +git push origin feature/amazing-feature |
| 324 | + |
| 325 | +# 7. 创建 Pull Request |
| 326 | +``` |
| 327 | + |
| 328 | +### 📝 贡献类型 |
| 329 | + |
| 330 | +#### 🐛 Bug 报告 |
| 331 | +发现 bug?请创建 [Issue](https://github.com/iota9star/json_dart/issues) 并包含: |
| 332 | +- 详细的重现步骤 |
| 333 | +- 期望行为和实际行为 |
| 334 | +- 环境信息(操作系统、Flutter 版本等) |
| 335 | +- 相关的错误日志 |
| 336 | + |
| 337 | +#### 💡 功能请求 |
| 338 | +有好想法?我们很乐意听到!请在 [Discussions](https://github.com/iota9star/json_dart/discussions) 中分享您的想法。 |
| 339 | + |
| 340 | +#### 🔧 代码贡献 |
| 341 | +- 遵循项目的代码风格 |
| 342 | +- 添加适当的测试 |
| 343 | +- 更新相关文档 |
| 344 | +- 确保所有测试通过 |
| 345 | + |
| 346 | +#### 📖 文档改进 |
| 347 | +- 修复文档中的错误 |
| 348 | +- 添加示例和用例 |
| 349 | +- 改进 API 文档 |
| 350 | +- 翻译文档到其他语言 |
| 351 | + |
| 352 | +### 🏆 贡献者 |
| 353 | + |
| 354 | +感谢所有为项目做出贡献的开发者! |
| 355 | + |
| 356 | +<a href="https://github.com/iota9star/json_dart/graphs/contributors"> |
| 357 | + <img src="https://contrib.rocks/image?repo=iota9star/json_dart" /> |
| 358 | +</a> |
| 359 | + |
| 360 | +## 📄 许可证 |
| 361 | + |
| 362 | +本项目使用 [MIT 许可证](LICENSE)。您可以自由地使用、修改和分发本软件。 |
| 363 | + |
| 364 | +## 🔗 相关链接 |
| 365 | + |
| 366 | +### 📱 项目资源 |
| 367 | +- [GitHub 仓库](https://github.com/iota9star/json_dart) |
| 368 | +- [发布页面](https://github.com/iota9star/json_dart/releases) |
| 369 | +- [问题追踪](https://github.com/iota9star/json_dart/issues) |
| 370 | +- [讨论区](https://github.com/iota9star/json_dart/discussions) |
| 371 | + |
| 372 | +### 📚 技术文档 |
| 373 | +- [Flutter 官方文档](https://docs.flutter.dev/) |
| 374 | +- [Dart 语言指南](https://dart.dev/guides) |
| 375 | +- [JSON5 规范](https://json5.org/) |
| 376 | +- [ANTLR4 文档](https://github.com/antlr/antlr4) |
| 377 | + |
| 378 | +### 🛠️ 相关工具 |
| 379 | +- [json_serializable](https://pub.dev/packages/json_serializable) |
| 380 | +- [freezed](https://pub.dev/packages/freezed) |
| 381 | +- [hive](https://pub.dev/packages/hive) |
| 382 | +- [isar](https://pub.dev/packages/isar) |
| 383 | + |
| 384 | +--- |
| 385 | + |
| 386 | +<p align="center"> |
| 387 | + <strong>🌟 如果这个项目对您有帮助,请给我们一个 Star!🌟</strong> |
| 388 | +</p> |
| 389 | + |
| 390 | +<p align="center"> |
| 391 | + Made with ❤️ by <a href="https://github.com/iota9star">iota9star</a> and <a href="https://github.com/iota9star/json_dart/graphs/contributors">contributors</a> |
| 392 | +</p> |
0 commit comments