在日常開發中JSON的序列化與反序列化是一個常見的操作;而Dart語言不支持反射,運行時反射會影響Dart的tree shaking(搖樹優化),tree shaking可以“抖掉”不需要使用的代碼,顯著優化 App 的體積,所以Flutter中沒有類似Gson這樣的Json庫,處理方法相比Kotlin或者Swift更為復雜和繁瑣,
方式一: dart:convert (不推薦)
- Flutter 有一個內置的 dart:convert 的庫,這個庫包含了一個簡單的 JSON 編碼器和解碼器,
- 使用
fromJson和toJson實作序列化和反序列化 - 全手寫代碼,在多人協作的團隊中不建議使用
- 官方檔案
示例代碼:
class User {
final String name;
final String email;
User(this.name, this.email);
User.fromJson(Map<String, dynamic> json)
: name = json['name'],
email = json['email'];
Map<String, dynamic> toJson() => {
'name': name,
'email': email,
};
}
方式二:json_serializable
- Flutter官方提供了一個自動化源代碼生成器
json_serializable來生成 JSON 序列化資料模板 - 依然需要大量的手寫代碼和撰寫映射邏輯,比方式一友好,但依然存在多人協作難以維護的問題,
使用代碼生成庫序列化 JSON 資料
方式三:Android Studio插件 (推薦)
- 使用IDEA插件可以免去繁瑣的配置和代碼撰寫作業
- 保證生成的代碼的一致性,并降低維護難度
- 適合多人協作
一、FlutterJsonBeanFactory(Only Null Safety)
- 官方網址
- 下載量:283k
使用方法
1、安裝插件
搜索flutter,第二個插件就是,

2、在開發檔案夾,右鍵選擇JsonToDartBeanAction

3、根據頁面提示填寫資訊

生成的代碼:
import 'package:flutter_demo_library/generated/json/base/json_field.dart';
import 'package:flutter_demo_library/generated/json/user_model_entity.g.dart';
import 'dart:convert';
@JsonSerializable()
class UserModelEntity {
int? id;
String? name;
UserModelEntity();
factory UserModelEntity.fromJson(Map<String, dynamic> json) => $UserModelEntityFromJson(json);
Map<String, dynamic> toJson() => $UserModelEntityToJson(this);
@override
String toString() {
return jsonEncode(this);
}
}
還會自動生成相關檔案:

4、修改后綴名
如果不需要Entiry做為后綴名,可以在AS的設定中修改:

5、欄位維護
如果修改了entiry中的欄位,只需在entiry檔案中使用快捷鍵alt + j或者option + j,插件會自動重新生成檔案
二、JsonToDart
- 官方網址
- 141k
- 下載量
使用方法與FlutterJsonBeanFactory,可以訪問官網查看使用方法,這里不再介紹
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/520743.html
標籤:其他
