## Dart JSON: 解析和生成 JSON 数据
简介
Dart 语言内置了强大的 JSON 解析和生成能力,无需依赖任何外部库。 `dart:convert` 库提供了 `jsonDecode` 和 `jsonEncode` 函数,方便地处理 JSON 数据。这使得 Dart 能够轻松地与各种 Web 服务和 API 交互,以及处理存储在 JSON 格式中的数据。 本文将详细介绍如何在 Dart 中使用 `dart:convert` 库处理 JSON 数据。### 一、 `jsonDecode` 函数:解析 JSON 数据`jsonDecode` 函数将 JSON 字符串解析为 Dart 对象。它能够处理多种 JSON 数据类型,包括:
数字:
整数和浮点数
字符串:
用双引号括起来的文本
布尔值:
`true` 和 `false`
列表:
用方括号 `[]` 括起来的元素序列
映射:
用花括号 `{}` 括起来的键值对 (类似 Dart 的 Map)
null:
表示空值
示例:
```dart
import 'dart:convert';void main() {String jsonString = '{"name": "John Doe", "age": 30, "city": "New York"}';Map jsonData = jsonDecode(jsonString);print(jsonData['name']); // 输出: John Doeprint(jsonData['age']); // 输出: 30print(jsonData['city']); // 输出: New YorkString jsonArrayString = '[{"id": 1, "name": "Item A"}, {"id": 2, "name": "Item B"}]';List jsonArrayData = jsonDecode(jsonArrayString);print(jsonArrayData[0]['name']); // 输出: Item Aprint(jsonArrayData[1]['id']); // 输出: 2
}
```
错误处理:
如果 JSON 字符串格式不正确,`jsonDecode` 函数会抛出 `FormatException` 异常。 良好的代码应该包含 `try-catch` 块来处理这些异常:```dart
try {// ... jsonDecode ...
} catch (e) {print("Error decoding JSON: $e");
}
```### 二、 `jsonEncode` 函数:生成 JSON 数据`jsonEncode` 函数将 Dart 对象编码为 JSON 字符串。它支持将 Map 和 List 等 Dart 对象转换为相应的 JSON 结构。
示例:
```dart
import 'dart:convert';void main() {Map data = {'name': 'Jane Doe','age': 25,'city': 'London','isMarried': false};String jsonString = jsonEncode(data);print(jsonString); // 输出: {"name":"Jane Doe","age":25,"city":"London","isMarried":false}List
示例 (使用自定义类):
```dart
import 'dart:convert';class User {final String name;final int age;final String city;User({required this.name, required this.age, required this.city});factory User.fromJson(Map json) {return User(name: json['name'],age: json['age'],city: json['city'],);}
}void main() {String jsonString = '{"name": "Alice", "age": 28, "city": "Paris"}';User user = User.fromJson(jsonDecode(jsonString));print(user.name); // 输出: Alice
}
```### 四、 总结`dart:convert` 库提供了简单而强大的工具来处理 JSON 数据。 通过 `jsonDecode` 和 `jsonEncode` 函数,你可以轻松地在 Dart 应用中解析和生成 JSON 数据,从而与各种 API 和服务进行交互。 记住要处理潜在的 `FormatException` 异常,并根据需要使用类型转换或自定义类来处理复杂的 JSON 结构。
Dart JSON: 解析和生成 JSON 数据**简介**Dart 语言内置了强大的 JSON 解析和生成能力,无需依赖任何外部库。 `dart:convert` 库提供了 `jsonDecode` 和 `jsonEncode` 函数,方便地处理 JSON 数据。这使得 Dart 能够轻松地与各种 Web 服务和 API 交互,以及处理存储在 JSON 格式中的数据。 本文将详细介绍如何在 Dart 中使用 `dart:convert` 库处理 JSON 数据。
一、 `jsonDecode` 函数:解析 JSON 数据`jsonDecode` 函数将 JSON 字符串解析为 Dart 对象。它能够处理多种 JSON 数据类型,包括:* **数字:** 整数和浮点数
* **字符串:** 用双引号括起来的文本
* **布尔值:** `true` 和 `false`
* **列表:** 用方括号 `[]` 括起来的元素序列
* **映射:** 用花括号 `{}` 括起来的键值对 (类似 Dart 的 Map)
* **null:** 表示空值**示例:**```dart
import 'dart:convert';void main() {String jsonString = '{"name": "John Doe", "age": 30, "city": "New York"}';Map jsonData = jsonDecode(jsonString);print(jsonData['name']); // 输出: John Doeprint(jsonData['age']); // 输出: 30print(jsonData['city']); // 输出: New YorkString jsonArrayString = '[{"id": 1, "name": "Item A"}, {"id": 2, "name": "Item B"}]';List jsonArrayData = jsonDecode(jsonArrayString);print(jsonArrayData[0]['name']); // 输出: Item Aprint(jsonArrayData[1]['id']); // 输出: 2
}
```**错误处理:**如果 JSON 字符串格式不正确,`jsonDecode` 函数会抛出 `FormatException` 异常。 良好的代码应该包含 `try-catch` 块来处理这些异常:```dart
try {// ... jsonDecode ...
} catch (e) {print("Error decoding JSON: $e");
}
```
二、 `jsonEncode` 函数:生成 JSON 数据`jsonEncode` 函数将 Dart 对象编码为 JSON 字符串。它支持将 Map 和 List 等 Dart 对象转换为相应的 JSON 结构。**示例:**```dart
import 'dart:convert';void main() {Map data = {'name': 'Jane Doe','age': 25,'city': 'London','isMarried': false};String jsonString = jsonEncode(data);print(jsonString); // 输出: {"name":"Jane Doe","age":25,"city":"London","isMarried":false}List
三、 处理复杂 JSON 结构对于更复杂的 JSON 结构,你可以使用类型转换或自定义类来更方便地处理数据。 例如,你可以创建一个 Dart 类来表示 JSON 中的对象,然后使用 `jsonDecode` 将 JSON 解析为该类的实例。**示例 (使用自定义类):**```dart
import 'dart:convert';class User {final String name;final int age;final String city;User({required this.name, required this.age, required this.city});factory User.fromJson(Map json) {return User(name: json['name'],age: json['age'],city: json['city'],);}
}void main() {String jsonString = '{"name": "Alice", "age": 28, "city": "Paris"}';User user = User.fromJson(jsonDecode(jsonString));print(user.name); // 输出: Alice
}
```
四、 总结`dart:convert` 库提供了简单而强大的工具来处理 JSON 数据。 通过 `jsonDecode` 和 `jsonEncode` 函数,你可以轻松地在 Dart 应用中解析和生成 JSON 数据,从而与各种 API 和服务进行交互。 记住要处理潜在的 `FormatException` 异常,并根据需要使用类型转换或自定义类来处理复杂的 JSON 结构。