Flutter 官方推薦的 json_serializable JSON 解析方案,之前感覺比較麻煩就沒有使用,使用的是通過 app.quicktype.io 在線生成,具體可以查看之前寫的一篇介紹文章: https://juejin.cn/post/6931265476928471053
app.quicktype.io 遲遲不支持空安全,我們又把解析方案換成了 FlutterJsonBeanFactory,這個插件會對 JSON 數據類型進行兼容處理,是個不錯的亮點。
最近 FlutterJsonBeanFactory 也出現了一些小問題,生成的類中會導入不相關的包,這讓我開始重新考慮官方方案。
畢竟官方方案一直有專人維護,功能也最全。
首頁,我們先 介紹一下使用官方方案的步驟:
一、在 pubspec.yaml 文件中添加依賴
dependencies:
json_annotation: ^4.5.0
dev_dependencies:
json_serializable: ^6.2.0
build_runner: ^2.1.11
二、手動創建模型類
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
User({
this.name,
this.email,
this.userId,
});
String? name;
String? email;
@JsonValue("user_id")
String? userId;
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
字段少的話,還可以接受,如果有幾十個字段,這塊就很耗時間,這個也是我們之前沒有選擇官方方案的原因。
三、執行構建命令
然后執行命令 flutter pub run build_runner build
,就可以生成解析 JSON 的代碼。
最近幾天,我發現一個插件:AutoJson
這個插件可以自動執行 flutter pub run build_runner build
命令,這給了我一個想法:那有沒有一個插件,能夠把上面三個步驟都給執行了?
就像 Android 開發者使用的 GsonFormat 一樣,輸入類名,復制 JSON 數據到輸入框。然后點擊確定按鈕,能夠幫我們把上面三個步驟給自動執行了,那我們在使用官方方案時,不就省事省力了?
我搜索了一圈,居然沒有發現這樣的插件。
由于我就借鑒(chaoxi)一些插件,開發了一個可以自動生成 json_serializable
Android Studio 插件,目前插件已經上傳,在 Android Studio Plugin 搜索 FlutterJsonToDart
即可下載使用
插件功能截圖:
插件介紹:
- 輸入 JSON 數據自動生成帶
json_serializable
注解的 dart 模型類 - 如果 pubspec.yaml 文件中沒有添加 json_annotation、json_serializable、build_runner 依賴,會自動幫你添加
- 自動執行命令
flutter pub run build_runner build --delete-conflicting-outputs
這個插件可以幫助大家簡化使用 json_serializable
,底層解析邏輯是 json_serializable
來處理的,這樣即便以后不使用該插件,相關代碼不受影響。
如果對插件生成的模型類,不滿意,可以自己進行調整:比如一些狀態字段改成枚舉,或者有些模型類已經定義過,想進行復用。
修改完字段后,你可以通過快捷鍵 alt + j 或者通過菜單 Build -> Run flutter pub run build_runner watch
運行 watch 命令,在后臺監控字段變化,如果字段發生變化,它會重新生成 xxx.g.dart。
如果大家對使用 json_serializable
有什么問題,也可以在評論中留言,后續有時間,我可以把使用 json_serializable
遇到的一些問題分享出來。
致謝:
- 輸入框參考的是這個插件 FlutterJsonBeanFactory
- 執行 flutter 命令參考的是這個插件 AutoJson
- 判斷 pubspec.yaml 中是否已經添加依賴參考這個插件:FlutterPubVersionChecker