Flutter如何实现JSON数据转换
在Flutter项目中,如何将JSON数据转换为Dart对象?目前我在处理API返回的JSON数据时遇到了困难,不知道是该手动编写模型类还是用工具自动生成。有没有推荐的高效转换方法或第三方库?最好能说明如何处理嵌套JSON结构和类型安全的问题。
        
          2 回复
        
      
      
        Flutter中可使用dart:convert库的json.decode()将JSON字符串转为对象,json.encode()将对象转为JSON字符串。推荐使用json_serializable包自动生成序列化代码,简化处理。
更多关于Flutter如何实现JSON数据转换的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现JSON数据转换主要有以下几种方式:
1. 手动序列化(基础方法)
使用 dart:convert 库进行手动转换:
import 'dart:convert';
// JSON字符串转Map
String jsonString = '{"name": "John", "age": 30}';
Map<String, dynamic> userMap = jsonDecode(jsonString);
// Map转JSON字符串
Map<String, dynamic> user = {'name': 'Alice', 'age': 25};
String json = jsonEncode(user);
2. 使用模型类(推荐)
创建数据模型类,实现序列化方法:
class User {
  final String name;
  final int age;
  User({required this.name, required this.age});
  // JSON转对象
  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
    );
  }
  // 对象转JSON
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }
}
// 使用示例
Map<String, dynamic> userMap = jsonDecode(jsonString);
User user = User.fromJson(userMap);
String json = jsonEncode(user.toJson());
3. 使用代码生成工具(最佳实践)
安装依赖:
dependencies:
  json_annotation: ^4.8.1
dev_dependencies:
  build_runner: ^2.4.4
  json_serializable: ^6.7.1
创建模型类:
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
  final String name;
  final int age;
  User({required this.name, required this.age});
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
生成代码:
flutter pub run build_runner build
4. 处理复杂JSON
对于嵌套结构:
@JsonSerializable()
class User {
  final String name;
  final Address address;
  
  User({required this.name, required this.address});
  
  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
  Map<String, dynamic> toJson() => _$UserToJson(this);
}
@JsonSerializable()
class Address {
  final String street;
  final String city;
  
  Address({required this.street, required this.city});
  
  factory Address.fromJson(Map<String, dynamic> json) => _$AddressFromJson(json);
  Map<String, dynamic> toJson() => _$AddressToJson(this);
}
推荐使用代码生成方式,因为它提供了类型安全、自动完成和编译时错误检查,大大减少了手动编码的错误。
 
        
       
             
             
            

