Flutter JSON序列化与反序列化插件serde_json的使用
Flutter JSON序列化与反序列化插件serde_json
的使用
在Flutter开发中,处理JSON数据是非常常见的需求。serde_json
插件可以帮助我们轻松地实现JSON的序列化和反序列化。本文将通过一个完整的示例来展示如何使用serde_json
插件。
示例代码
import 'package:serde_json/serde_json.dart'; // 导入serde_json包
import 'package:test/test.dart'; // 导入测试相关的库
// 定义一个类,并使用[@Serde](/user/Serde)()注解
[@Serde](/user/Serde)()
class User {
String name;
int age;
User(this.name, this.age);
// 构造函数用于从Map对象创建User实例
User.fromJson(Map<String, dynamic> json)
: name = json['name'],
age = json['age'];
// 将User实例转换为Map对象
Map<String, dynamic> toJson() => {
'name': name,
'age': age,
};
}
void main() {
// 创建一个User实例
final user = User('张三', 30);
// 将User实例转换为JSON字符串
final jsonString = user.toJson().toString();
print('JSON字符串: $jsonString');
// 将JSON字符串解析为Map对象
final parsedJson = jsonDecode(jsonString) as Map<String, dynamic>;
print('解析后的Map: $parsedJson');
// 将Map对象转换回User实例
final newUser = User.fromJson(parsedJson);
print('新的User实例: $newUser');
}
详细步骤
-
导入库
import 'package:serde_json/serde_json.dart'; import 'package:test/test.dart';
-
定义模型类 使用
[@Serde](/user/Serde)()
注解来标记类,以便支持序列化和反序列化。[@Serde](/user/Serde)() class User { String name; int age; User(this.name, this.age); // 构造函数用于从Map对象创建User实例 User.fromJson(Map<String, dynamic> json) : name = json['name'], age = json['age']; // 将User实例转换为Map对象 Map<String, dynamic> toJson() => { 'name': name, 'age': age, }; }
-
创建实例并进行序列化
final user = User('张三', 30); final jsonString = user.toJson().toString(); print('JSON字符串: $jsonString');
-
反序列化JSON字符串
final parsedJson = jsonDecode(jsonString) as Map<String, dynamic>; print('解析后的Map: $parsedJson');
-
将Map对象转换回User实例
final newUser = User.fromJson(parsedJson); print('新的User实例: $newUser');
更多关于Flutter JSON序列化与反序列化插件serde_json的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JSON序列化与反序列化插件serde_json的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,JSON 序列化与反序列化是一个常见的任务。虽然 serde_json
是 Rust 中常用的 JSON 库,但在 Flutter/Dart 中,我们通常会使用 dart:convert
库或一些第三方库来处理 JSON 数据。以下是如何在 Flutter 中进行 JSON 序列化与反序列化的详细说明。
1. 使用 dart:convert
库
dart:convert
是 Dart 标准库中的一部分,提供了 JSON 编码和解码的功能。
序列化(将对象转换为 JSON 字符串)
import 'dart:convert';
void main() {
Map<String, dynamic> user = {
'name': 'John Doe',
'email': 'john.doe@example.com',
'age': 30,
};
String jsonString = jsonEncode(user);
print(jsonString); // {"name":"John Doe","email":"john.doe@example.com","age":30}
}
反序列化(将 JSON 字符串转换为对象)
import 'dart:convert';
void main() {
String jsonString = '{"name":"John Doe","email":"john.doe@example.com","age":30}';
Map<String, dynamic> user = jsonDecode(jsonString);
print(user['name']); // John Doe
}
2. 使用 json_serializable
插件
对于复杂的对象,手动编写序列化和反序列化代码可能会很繁琐。json_serializable
是一个代码生成库,可以自动生成这些代码。
安装依赖
在 pubspec.yaml
中添加以下依赖:
dependencies:
json_annotation: ^4.8.0
dev_dependencies:
build_runner: ^2.3.3
json_serializable: ^6.7.1
创建模型类
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final String email;
final int age;
User({required this.name, required this.email, required this.age});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
生成代码
运行以下命令生成序列化代码:
flutter pub run build_runner build
这会生成 user.g.dart
文件,其中包含 _$UserFromJson
和 _$UserToJson
方法。
使用生成的代码
void main() {
String jsonString = '{"name":"John Doe","email":"john.doe@example.com","age":30}';
User user = User.fromJson(jsonDecode(jsonString));
print(user.name); // John Doe
String newJsonString = jsonEncode(user.toJson());
print(newJsonString); // {"name":"John Doe","email":"john.doe@example.com","age":30}
}