告别手写,自动生成Flutter/Dart实体类。
在Java中,json转实体类,有很多工具,我一般用IDEA的Gsonformat插件,把json字符串粘贴到输入框,点击生成,一个Java Bean就写好了。
json2entity,就是Dart和Flutter开发的Gsonformat。
$ j2e -j '{"result":1,"msg":"ok"}'
输出:
$ 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 只是json2entity 的别名,json2entity 和 j2e, 使用哪个都可以,是一个dart包
只需要三步,就可以使用。
dev_dependencies:
json2entity: 1.0.6
$ pub global activate json2entity
"$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%
如果输出如上所示,则已经成功了。
上面给出了最简单用法,但是似乎不够智能,还得ctrl-c/ctrl-v
如果你想输出到文件,也是ok的。你可以使用重定向,但是有更好的方法,
使用-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
};
}
如果你使用了json_serializable. 也是可以的:只需要多一个-s
$ j2e -j '{"result":1,"msg":"ok"}' -s
$ j2e -j '{"result":1,"msg":"ok"}' -o lib/model/BaseModel
当然,这种情况下,生成的只是部分代码,.g.dart
还需要你手动的执行一下builder:
$ 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\"}}"
}
j2e -f input.json -o lib/model
or
j2e -f input.json -o lib/model -s
对于一个工具来说,当然是越简洁越好,上面的功能,已经基本可以。
代码已经打包发布到pub仓库了,名字就叫json2entity
更多信息,在Github