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. 配置完依赖后,执行 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文件是自动生成的
需要实现序列化与反序列化函数

  1. 在根目录,执行flutter pub run build_runner build
    这个命令会:
    扫描项目中所有被@JsonSerializable()注解的类
    为每个类生成对应的xxx.g.dart文件
    还会生成序列化和反序列化实现

三、 一些使用配置

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 范型的支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容