Flutter中如何使用json_annotation处理JSON数据
我在Flutter项目中需要处理复杂的JSON数据,听说json_annotation这个库很好用,但不太清楚具体如何配置和使用。能否详细说明以下步骤:
- 如何添加json_serializable和json_annotation依赖?
- 如何用@JsonSerializable标注模型类?
- 自动生成.g.dart文件的具体命令是什么?
- 遇到"Target of URI doesn’t exist"错误该如何解决?
- 如何处理嵌套的JSON对象和数组?
        
          2 回复
        
      
      
        在Flutter中使用json_annotation处理JSON数据,需以下步骤:
- 添加依赖:json_annotation、build_runner和json_serializable。
- 创建模型类,使用@JsonSerializable注解。
- 运行flutter pub run build_runner build生成序列化代码。
- 使用fromJson和toJson方法转换数据。
示例:
@JsonSerializable()
class User {
  final String name;
  User(this.name);
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
更多关于Flutter中如何使用json_annotation处理JSON数据的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用json_annotation处理JSON数据,可以简化序列化和反序列化过程。以下是详细步骤:
1. 添加依赖
在pubspec.yaml文件中添加:
dependencies:
  json_annotation: ^4.8.1
dev_dependencies:
  build_runner: ^2.4.4
  json_serializable: ^6.7.1
2. 创建数据模型类
使用@JsonSerializable注解类,并定义fromJson和toJson方法:
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart'; // 生成的文件
@JsonSerializable()
class User {
  final String name;
  final int age;
  final String email;
  User({required this.name, required this.age, required this.email});
  // 从JSON映射创建User对象
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  // 将User对象转换为JSON映射
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
3. 生成代码
运行以下命令生成序列化代码:
flutter pub run build_runner build
或监听文件变化自动生成:
flutter pub run build_runner watch
4. 使用示例
// JSON字符串转对象
Map<String, dynamic> userMap = jsonDecode('{"name": "Alice", "age": 25, "email": "alice@example.com"}');
User user = User.fromJson(userMap);
// 对象转JSON字符串
String jsonString = jsonEncode(user.toJson());
5. 高级配置
- 字段别名:使用@JsonKey(name: 'user_name')映射不同JSON键名。
- 忽略字段:添加ignore: true到@JsonKey。
- 自定义转换:通过fromJson和toJson参数实现。
注意事项
- 确保类字段为public(非以下划线开头)。
- 每次修改模型类后需重新生成代码。
- 支持嵌套对象和列表的自动处理。
这种方法减少了手动编写序列化代码的工作量,提高开发效率并降低错误率。
 
        
       
             
             
            

