Dart 语言 JSON 序列化与反序列化技术详解
在当今的软件开发中,JSON(JavaScript Object Notation)已经成为了一种非常流行的数据交换格式。Dart 语言作为一种现代化的编程语言,也提供了强大的 JSON 序列化与反序列化功能。本文将围绕 Dart 语言 JSON 序列化与反序列化这一主题,详细介绍 Dart 中如何进行 JSON 数据的序列化和反序列化操作。
Dart JSON 序列化
1. 使用 `jsonEncode` 方法
Dart 提供了 `jsonEncode` 方法,可以将 Dart 对象转换为 JSON 字符串。以下是一个简单的示例:
dart
void main() {
var person = {
'name': 'John Doe',
'age': 30,
'isMarried': false
};
String jsonString = jsonEncode(person);
print(jsonString);
}
输出结果为:
json
{"name":"John Doe","age":30,"isMarried":false}
2. 使用 `toJson` 方法
对于自定义的 Dart 类,可以使用 `toJson` 方法来手动实现序列化。以下是一个自定义类的示例:
dart
class Person {
String name;
int age;
bool isMarried;
Person(this.name, this.age, this.isMarried);
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'isMarried': isMarried,
};
}
}
void main() {
var person = Person('John Doe', 30, false);
String jsonString = jsonEncode(person.toJson());
print(jsonString);
}
输出结果与之前相同。
3. 使用 `jsonSerializable` 库
对于更复杂的序列化需求,可以使用 `jsonSerializable` 库来自动生成序列化代码。以下是一个使用 `jsonSerializable` 库的示例:
dart
import 'package:json_serializable/json_serializable.dart';
part 'person.g.dart';
class Person {
String name;
int age;
bool isMarried;
Person(this.name, this.age, this.isMarried);
factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
Map<String, dynamic> toJson() => _$PersonToJson(this);
}
void main() {
var person = Person('John Doe', 30, false);
String jsonString = jsonEncode(person.toJson());
print(jsonString);
}
这里使用了 `jsonSerializable` 库的 `@JsonSerializable` 注解来自动生成序列化和反序列化代码。
Dart JSON 反序列化
1. 使用 `jsonDecode` 方法
与 `jsonEncode` 相对应,Dart 提供了 `jsonDecode` 方法,可以将 JSON 字符串转换为 Dart 对象。以下是一个简单的示例:
dart
void main() {
String jsonString = '{"name":"John Doe","age":30,"isMarried":false}';
var person = jsonDecode(jsonString);
print(person['name']); // 输出: John Doe
}
2. 使用 `fromJson` 方法
对于自定义的 Dart 类,可以使用 `fromJson` 方法来手动实现反序列化。以下是一个自定义类的示例:
dart
class Person {
String name;
int age;
bool isMarried;
Person(this.name, this.age, this.isMarried);
factory Person.fromJson(Map<String, dynamic> json) {
return Person(
json['name'],
json['age'],
json['isMarried'],
);
}
}
void main() {
String jsonString = '{"name":"John Doe","age":30,"isMarried":false}';
var person = Person.fromJson(jsonDecode(jsonString));
print(person.name); // 输出: John Doe
}
3. 使用 `jsonSerializable` 库
对于更复杂的反序列化需求,可以使用 `jsonSerializable` 库来自动生成反序列化代码。以下是一个使用 `jsonSerializable` 库的示例:
dart
import 'package:json_serializable/json_serializable.dart';
part 'person.g.dart';
class Person {
String name;
int age;
bool isMarried;
Person(this.name, this.age, this.isMarried);
factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);
}
void main() {
String jsonString = '{"name":"John Doe","age":30,"isMarried":false}';
var person = Person.fromJson(jsonDecode(jsonString));
print(person.name); // 输出: John Doe
}
这里同样使用了 `jsonSerializable` 库的 `@JsonSerializable` 注解来自动生成反序列化代码。
总结
本文详细介绍了 Dart 语言中 JSON 序列化与反序列化的技术。通过使用 `jsonEncode` 和 `jsonDecode` 方法,我们可以轻松地将 Dart 对象转换为 JSON 字符串,以及将 JSON 字符串转换为 Dart 对象。对于更复杂的序列化和反序列化需求,可以使用 `jsonSerializable` 库来自动生成代码。希望本文能帮助读者更好地理解和应用 Dart 语言中的 JSON 序列化与反序列化技术。
Comments NOTHING