Flutter Json解析 - json_serializable

一、配置依賴

  1. 在pubspec.yaml中添加必要的依賴:
dependencies:
  flutter:
    sdk: flutter
  json_annotation: ^4.8.1  # 提供必要的注解
 
dev_dependencies:
  build_runner: ^2.4.6     # 代碼生成工具
  json_serializable: ^6.7.1 # 序列化代碼生成器
  1. 配置完依賴后,執(zhí)行 flutter pub get

二、 使用

  1. 定義一個模型類
import 'package:json_annotation/json_annotation.dart';
 
part 'user.g.dart';

@JsonSerializable()  // 表示這個類需要生成序列化代碼
class User {
  final String name;
  final String name;
  final int age;
  
  User({
    required this.name,
    required this.email
  });
  
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  
  Map<String, dynamic> toJson() => _$UserToJson(this)
}

代碼解釋如下:
@JsonSerializable()注解告訴生成器需要為這個類生成序列化代碼
user.g.dart文件是自動生成的
需要實現(xiàn)序列化與反序列化函數(shù)

  1. 在根目錄,執(zhí)行flutter pub run build_runner build
    這個命令會:
    掃描項目中所有被@JsonSerializable()注解的類
    為每個類生成對應的xxx.g.dart文件
    還會生成序列化和反序列化實現(xiàn)

三、 一些使用配置

3.1 @JsonKey 的簡單使用

  @JsonKey(name: 'user_name') // 自定義JSON字段名
   final String name;

  @JsonKey(ignore: true) // 忽略此字段,不參與序列化
   final int age;

  @JsonKey(defaultValue: 'unknown') // 默認值
     final String statuc;

 @JsonKey(includeIfNull: false) // 為null時不包含在JSON中
 final String token;

  @JsonKey(fromJson: _parseBalance, toJson: _stringifyBalance) // 自定義轉換
  final double balance;

 static double _parseBalance(String json) => double.parse(json);
  static String _stringifyBalance(double balance) => balance.toStringAsFixed(2);

3.2 @JsonKey 枚舉的支持

enum UserType {
  @JsonValue('admin')
  admin,
  @JsonValue('editor')
  editor,
  @JsonValue('viewer')
  viewer,
  @JsonValue('guest')
  guest
}

3.3 范型的支持

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容