You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart中使用Get方法并将服务端返回的JSON解码为变量?

Dart 发起Get网络请求并解析JSON的实现方案

前置依赖配置

首先需要在项目的pubspec.yaml中添加官方http库依赖:

dependencies:
  http: ^1.1.0 # 可替换为当前最新版本

Dart内置的dart:convert库用于JSON解码,无需额外引入。

实现步骤

  • 导入http和convert库
  • 编写异步方法,用http.get发起请求,通过await等待请求结果返回
  • 判断响应状态码为200(请求成功)后,用jsonDecode解码响应体的JSON字符串为Map结构
  • 将Map中的值直接赋值给对应变量,或映射为实体类属性使用(更推荐)

基础示例(直接解析到变量)

import 'package:http/http.dart' as http;
import 'dart:convert';

void main() async {
  // 发起Get请求
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/todos/1'));

  if (response.statusCode == 200) {
    // 解码JSON为Map
    Map<String, dynamic> resData = jsonDecode(response.body);
    // 赋值给对应变量
    int taskId = resData['id'];
    String taskTitle = resData['title'];
    bool isCompleted = resData['completed'];
    // 测试输出
    print('ID: $taskId, 标题: $taskTitle, 是否完成: $isCompleted');
  } else {
    print('请求失败,状态码: ${response.statusCode}');
  }
}

更安全的实现(映射为实体类)

直接通过Map的key取值容易出现拼写错误、类型不匹配的问题,推荐把JSON映射为Dart实体类使用:

// 首先定义实体类
class Task {
  final int id;
  final String title;
  final bool completed;

  Task({required this.id, required this.title, required this.completed});

  // 实现JSON转实体类的工厂方法
  factory Task.fromJson(Map<String, dynamic> json) {
    return Task(
      id: json['id'],
      title: json['title'],
      completed: json['completed'],
    );
  }
}

// 改造请求逻辑
import 'package:http/http.dart' as http;
import 'dart:convert';

void main() async {
  final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/todos/1'));
  if (response.statusCode == 200) {
    Map<String, dynamic> jsonMap = jsonDecode(response.body);
    Task task = Task.fromJson(jsonMap);
    // 直接通过实体类属性取值,有类型校验,不易出错
    print('ID: ${task.id}, 标题: ${task.title}, 是否完成: ${task.completed}');
  }
}

注意事项

  • 网络请求属于异步操作,必须在标记了async的方法中执行,请求前加await关键字等待结果返回
  • 必须做状态码校验后再解析响应内容,避免请求失败时解码报错
  • 如果是Flutter端使用,安卓需要在AndroidManifest.xml中添加网络权限,iOS需要在Info.plist中配置允许HTTP请求(如果接口未用HTTPS)

内容的提问来源于stack exchange,提问作者Navid Shokoufeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:06:02