为Flutter/Dart开发者提供的6种JsonToDart工具的比较

1,299 阅读4分钟

TLDR

🔔 使用Dart QuickType。它可以从JSON对象中生成最好的Dart代码。

Quicktype

Quicktype是一个针对JSON对象的多语言转换器,它也支持Dart。有一些选项可以自定义生成的类。而且还有一个Visual Studio Code的扩展。

结果包含一切,但也有问题。

  • Quicktype不使用required 关键字,而是使用旧的@required 注释。
  • Quicktype不支持null-safety

这使得代码在没有手动修改的情况下无法使用。Dart语言还有77个开放问题,而且官方源代码已经几个月没有更新了。我不指望在这里有什么进展,但尽管有必要的手动修改,这个工具仍然可以节省开发时间。

扎实,但不完美。比自己写要快。😒

JSON到Dart的转换器

JSON to Dart Converter是一个免费的在线Dart模型类生成器。唯一可用的选项是使字段私有化。在这种情况下,会生成getters和setters。

JSON可以被转换为Dart类,但有很大的问题。

  • 没有防空功能
  • 当字段为私有时,会生成获取器和设置器
  • 数组没有被识别为List<int> ,而是被识别为Object<int>
  • 类型为Object 的列表没有被识别

总的来说,这段代码几乎是无用的,因为你需要大量的时间来修复错误,如果你自己写的话,会更快。没有GitHub仓库或类似的东西,只有一个邮件地址用于联系。这个网站看起来像是昨天才开始的,除了这个转换器,没有任何内容。

不要使用它,这是在浪费时间!⛔

JSON格式化器

JSON formatter是另一个免费的在线Dart模型类生成器。没有任何选项可以选择,你只需输入JSON,该工具就会将其转换为Dart类。

输出的结果是无用的,甚至没有fromJsontoJson 方法。没有null-safety,没有final fields,但至少对象结构被正确转换。

绝对不值得!⛔

JSON到Dart模型

JSON to Dart Model为输出提供了许多自定义选项。该代码是开源的,目前有3个开放问题。该项目似乎不像quicktype那样出名,但生成的代码会在当前的Dart版本中开箱工作。

转换后的JSON片段作为注释包含在代码中,这有点让人讨厌。另外,数组的转换似乎非常麻烦。而且可悲的是,转换器创建了两个名称不同的相同对象。但除此之外,它看起来不错。然而,我不会使用这个结果,因为代码风格非常奇怪,我必须做大量的重构工作。

可以工作,可以使用,但代码风格很奇怪。🙄

Dart QuickType

Dart QuickType是Quicktype的一个分叉,它的代码基础更新。所有提到的Quicktype的缺陷都在这里得到了修复。这里没有任何公开的问题,创建的Dart代码看起来很简单,很苗条。

默认值、无效安全、最终字段......你需要的一切都在这里。我唯一希望加入的小东西是等价物,因为我一直在使用它。但我可以容忍这一个手动步骤。也许作者会在未来的版本中加入我的建议

明显的赢家,没有反对意见,最好的代码生成!✔

JSON到Dart的在线转换器 空值安全

JSON到Dart的在线转换器Null Safety除了设置类名外,没有任何选项,而且生成的代码不能开箱即用。

这段代码的一些缺陷。

  • 在使用late 关键字时,没有必要。required
  • 变量可以像关键字一样命名→编译器错误
  • 创建了两个相同的类ObjectList
  • fromJson 方法中没有后退值
  • 创建的类有额外的编译器错误

需要手动更正的地方太多,没有用处。⛔

结论

Dart QuickType生成的代码是最好的,是这次比较的赢家。在某种程度上,如果你不介意代码的风格,你也可以使用JSON to Dart Model。所有其他的转换器都不值得花时间,所以直接跳过它们。

我错过了一个好的转换器吗?如果你认为我应该给它一个机会,请告诉我 😉