flutter json插件如何使用

在Flutter中如何使用json插件来解析和生成JSON数据?我刚接触Flutter开发,遇到需要处理API返回的JSON数据的情况,但不太清楚具体该怎么做。能否介绍一下常用的json插件(比如dart:convert或json_serializable)的基本用法?最好能提供一些简单的代码示例说明如何将JSON字符串转换为Dart对象,以及如何将Dart对象序列化成JSON字符串。

2 回复

使用json_serializable插件:

  1. 添加依赖:json_annotationjson_serializablebuild_runner
  2. 创建模型类,添加@JsonSerializable()注解。
  3. 运行命令生成代码:flutter packages pub run build_runner build
  4. 使用fromJsontoJson方法序列化/反序列化。

更多关于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

  1. 添加依赖:
dependencies:
  json_annotation: ^4.8.1

dev_dependencies:
  build_runner: ^2.4.4
  json_serializable: ^6.7.1
  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);
}
  1. 生成代码:
flutter pub run build_runner build
  1. 使用:
// 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)
回到顶部