flutter json插件如何使用
在Flutter中如何使用json插件来解析和生成JSON数据?我刚接触Flutter开发,遇到需要处理API返回的JSON数据的情况,但不太清楚具体该怎么做。能否介绍一下常用的json插件(比如dart:convert或json_serializable)的基本用法?最好能提供一些简单的代码示例说明如何将JSON字符串转换为Dart对象,以及如何将Dart对象序列化成JSON字符串。
        
          2 回复
        
      
      
        使用json_serializable插件:
- 添加依赖:
json_annotation、json_serializable、build_runner。 - 创建模型类,添加
@JsonSerializable()注解。 - 运行命令生成代码:
flutter packages pub run build_runner build。 - 使用
fromJson和toJson方法序列化/反序列化。 
更多关于flutter json插件如何使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中,处理JSON数据主要使用 dart:convert 库的内置功能,无需额外插件。以下是两种常用方法:
1. 手动序列化(推荐用于简单数据结构)
使用 json.decode() 和 json.encode():
import 'dart:convert';
// JSON字符串转Map
String jsonString = '{"name": "张三", "age": 25}';
Map<String, dynamic> user = json.decode(jsonString);
print(user['name']); // 输出:张三
// Map转JSON字符串
Map<String, dynamic> userMap = {'name': '李四', 'age': 30};
String jsonStr = json.encode(userMap);
print(jsonStr); // 输出:{"name":"李四","age":30}
2. 自动序列化(推荐用于复杂数据)
使用 json_annotation + json_serializable:
- 添加依赖:
 
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
- 使用:
 
// JSON转对象
Map<String, dynamic> userMap = json.decode('{"name": "王五", "age": 28}');
User user = User.fromJson(userMap);
// 对象转JSON
String jsonStr = json.encode(user.toJson());
处理网络请求中的JSON:
// 使用http包示例
import 'package:http/http.dart' as http;
Future<User> fetchUser() async {
  final response = await http.get(Uri.parse('https://api.example.com/user'));
  if (response.statusCode == 200) {
    return User.fromJson(json.decode(response.body));
  } else {
    throw Exception('加载失败');
  }
}
建议:
- 简单数据:使用手动序列化
 - 复杂数据:使用自动序列化(类型安全、减少错误)
 - 确保处理异常(如使用 try-catch 包裹 json.decode)
 
        
      
            
            
            
