返回

从网络请求到数据解析:dio + json_serializable 实战指南

Android

前言

数据是现代应用程序的生命线,从网络请求数据是不可避免的。而将网络请求回来的 JSON 数据解析成 Dart 对象也是开发中常见的任务。在本文中,我们将介绍如何使用 dio 和 json_serializable 这两个强大的库来轻松实现上述任务。

Dio 简介

Dio 是一个通用的 HTTP 客户端,它提供了一套丰富的特性,例如请求拦截、响应拦截、超时设置和重试机制。使用 Dio 可以大大简化网络请求的编写。

Json_serializable 简介

Json_serializable 是一个代码生成库,它可以自动将 Dart 对象序列化和反序列化为 JSON 数据。通过使用 json_serializable,我们可以轻松地将网络请求回来的 JSON 数据解析成 Dart 对象,从而简化数据处理。

实战指南

1. 导入库

import 'package:dio/dio.dart';
import 'package:json_annotation/json_annotation.dart';

2. 定义数据模型

对于要解析的 JSON 数据,我们需要定义一个对应的 Dart 数据模型。使用 json_serializable,我们可以使用 @JsonSerializable() 注解来标记一个类为可序列化类。

@JsonSerializable()
class User {
  final int id;
  final String name;

  User(this.id, this.name);

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}

3. 编写网络请求

使用 Dio 发送网络请求非常简单:

Dio dio = Dio();
Response<dynamic> response = await dio.get('https://example.com/api/users');

4. 解析 JSON 数据

使用 json_serializable 解析 JSON 数据也非常方便:

User user = User.fromJson(response.data);

5. 自定义参数和字段注释

为了提高代码的可读性和可维护性,我们可以使用 @JsonKey() 注解来自定义参数和字段的注释。

@JsonSerializable()
class User {
  final int id;

  @JsonKey(name: 'user_name')
  final String name;

  User(this.id, this.name);

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}