初次發文,請多多包涵。git
在Java開發中,JSON字符串轉實體類,有不少工具,我最經常使用IDEA的Gsonformat插件,把JSON字符串粘貼到文本框,點擊生成,一個Java Bean就寫好了。 json2entity,就是Dart和Flutter開發的Gsonformat。github
$ j2e -j '{"result":1,"msg":"ok"}'
複製代碼
terminal輸出:shell
$ 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
};
}%
複製代碼
怎麼樣是否是很簡單?json
BUT!!! j2e
是什麼,j2e
在哪裏 ?bash
j2e
只是json2entity
的別名,使用json2entity
和 j2e
, 是等價的。 json2entity是一個Dart package,下面是安裝方法。工具
最多隻需3步:ui
dev_dependencies:
json2entity: 1.0.6
複製代碼
$ pub global activate json2entity
複製代碼
"$HOME/.pub-cache/bin"
已添加到你的PATH變量中。若是已添加,能夠跳過此步。設置完成後,在你的terminal中輸入j2e
或者json2entity
,而後回車,看看效果吧:this
$ 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%
複製代碼
若是輸出如上所示,則已經成功了,在terminal的任何路徑,你均可以愉快地使用了。spa
沒有指定輸出,默認輸出到終端。插件
若是想輸出到文件,可使用-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. 也是能夠的:只須要多一個-s
$ j2e -j '{"result":1,"msg":"ok"}' -s # 輸出到stdout
$ j2e -j '{"result":1,"msg":"ok"}' -o lib/model/BaseModel -s # 輸出到文件: ./lib/base_model.dart
複製代碼
固然,這種狀況下,生成的只是部分代碼,對應的.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使用Dart語言實現,已發佈到 Pub | Dart | json2entity。