在日常開發中JSON的序列化與反序列化是一個常見的操作;而Dart語言不支持反射,運行時反射會影響Dart的tree shaking(搖樹優化),tree shaking可以“抖掉”不需要使用的代碼,顯著優化 App 的體積,所以Flutter中沒有類似Gson這樣的Json庫,處理方法相比Kotl ...
在日常開發中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 序列化數據模板 - 依然需要大量的手寫代碼和編寫映射邏輯,比方式一友好,但依然存在多人協作難以維護的問題。
方式三: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,可以訪問官網查看使用方法,這裡不再介紹