无需手写,自动生成Flutter/Dart实体类文件

$ j2e -j '{"result":1,"msg":"ok"}'
复制代码

terminal输出:

$ j2e -j '{"result":1,"msg":"ok"}'
class Model {
 num result;
 String msg;
 Model({
  this.result,
  this.msg
 });

 Model.fromJson(Map < String, dynamic > json):
  result=json['result'],
  msg=json['msg'];
 Map <String, dynamic> toJson() => {
  'result':result,
  'msg':msg
 };
}%
复制代码

怎么样是不是很简单?

BUT!!! j2e 是什么, j2e 在哪里 ?

j2e 只是 json2entity 的别名,使用 json2entityj2e , 是等价的。json2entity是一个Dart package,下面介绍安装方法。

使用前准备

最多只需3步:

  1. pubspec.yaml中引入
dev_dependencies:
  json2entity: 1.0.6
复制代码
  1. 激活:
$ pub global activate json2entity
复制代码
  1. 添加 "$HOME/.pub-cache/bin" 到你的PATH变量中。如果已添加,可以跳过此步。

设置完成后,在你的terminal中输入 j2e 回车,看看效果吧:

$ j2e
No input args found
Usage:
        -j, --json                              Input json string
        -f, --file                              Input json from file
        -o, --output                            Input output file path and name
        -v, --[no-]verbose                      Show verbose
        -s, --[no-]json-serializable-support    Indicates whether json-serializable is supported
        -h, --[no-]help                         Help%
复制代码

如果输出如上所示,则已经成功了。

高级用法

输出到文件

没有指定输出,默认输出到终端。

如果想输出到文件,可以使用 -o 选项, 使用重定向输出到文件也可以,但是使用 -o ,既指定了文件名,又指定了类名:

j2e -j '{"result":1,"msg":"ok"}' -o lib/model/BaseModel

$ j2e -j '{"result":1,"msg":"ok"}' -o lib/model/BaseModel
$ cat lib/model/base_model.dart
class BaseModel {
 num result;
 String msg;
 BaseModel({
  this.result,
  this.msg
 });

 BaseModel.fromJson(Map < String, dynamic > json):
  result=json['result'],
  msg=json['msg'];
 Map <String, dynamic> toJson() => {
  'result':result,
  'msg':msg
 };
}
复制代码

注意,例如这里BaseModel,使用了驼峰格式,这样,实体类文件名为 base_model.dart

支持json_serializable

如果你使用了json_serializable. 也是可以的:只需要多一个 -s

$ j2e -j '{"result":1,"msg":"ok"}' -s
$ j2e -j '{"result":1,"msg":"ok"}' -o lib/model/BaseModel
复制代码

当然,这种情况下,生成的只是部分代码,对应的 .g.dart 文件,还需要你手动的执行一下build_runner:

$ flutter packages pub run build_runner build
复制代码

从文件读取输入

通过 -j 从命令行读取输入,每次只能读取一条JSON。如果不能满足你的需求,你可以使用 -f ,从文件批量读取并装换。 输入文件的格式,必须是格式良好的JSON字符串,格式如下:

//input.json
{
    “BaseModel": "{\"result\":1,\"msg\":\"ok\"}",
    "AnswerModel": "{\"result\":1,\"msg\":\"ok\",\"data\":{\"answer\":\"A\"}}"
}
复制代码

-f 指定输入文件, -o 输出目录,命令如下:

$ j2e -f input.json -o lib/model
$ j2e -f input.json -o lib/model -s
复制代码

其他

生成的实体类,有时候可能需要一些修改。

例如,生成的实体类,属性名和JSON里的key保持一致。如果key是下划线命名法,你需要的事驼峰命名法,你可能需要手动修改一下。 如果你使用了 json_serializable ,可以使用 @JsonKey 标注,例如:

@JsonKey(name: 'registration_date_millis')
final int registrationDateMillis;
复制代码

另外,工具只提供了简单的缩进,并不保证缩进完美。可以在生成后使用dartfmt自行格式化:

dartfmt -w <dart-code-path>
复制代码

或者使用IDE格式化代码。

对于一个工具来说,上面这些已经满足大部分需求了。本来打算写一个IDEA plugin,使用vscode后,就放弃了。而且使用terminal更高大上是不是?

更多信息在这里: Github

json2entity in PUB

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章