Dart 语言 JSON序列化与反序列化

Dart阿木 发布于 2025-06-18 13 次阅读


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 序列化与反序列化技术。