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

Dart中如何解析服务端请求返回的JSON数据并赋值给变量

Dart 网络请求JSON解析实现方案

前置准备

在代码头部导入系统内置的JSON转换库:

import 'dart:convert';

两种解析实现方式

你可以根据业务响应的复杂度选择对应的解析方案:

方式一:手动解析(适合结构简单的响应)

直接修改你原有代码中状态码为200的分支即可:

if (response.statusCode == 200) {
  // 先把响应流转换为字符串
  String responseStr = await response.stream.bytesToString();
  // 解析JSON为Dart可操作的对象
  // 若服务端返回JSON对象用Map接收,返回JSON数组用List接收
  Map<String, dynamic> jsonData = jsonDecode(responseStr);
  // 按字段取值赋值给变量即可,示例:
  int responseCode = jsonData['code'];
  String responseMsg = jsonData['message'];
  dynamic businessData = jsonData['data'];
  // 后续可直接使用上述变量处理业务逻辑
  print("请求成功,返回信息:$responseMsg");
} else {
  print(response.reasonPhrase);
}

方式二:模型类解析(适合复杂结构,类型安全更推荐)

这种方式可以避免字段写错、类型不匹配的问题,首先定义和服务端返回结构完全匹配的模型类,举个例子,假设服务端返回结构如下:

{
  "code": 200,
  "msg": "查询成功",
  "data": {
    "id": 1001,
    "inquiryResult": "已提交",
    "createTime": "2024-01-01"
  }
}

对应的模型类代码:

class InquiryResponse {
  final int code;
  final String msg;
  final ResponseData? data;

  InquiryResponse({
    required this.code,
    required this.msg,
    this.data,
  });

  factory InquiryResponse.fromJson(Map<String, dynamic> json) {
    return InquiryResponse(
      code: json['code'] as int,
      msg: json['msg'] as String,
      data: json['data'] != null ? ResponseData.fromJson(json['data']) : null,
    );
  }
}

class ResponseData {
  final int id;
  final String inquiryResult;
  final String createTime;

  ResponseData({
    required this.id,
    required this.inquiryResult,
    required this.createTime,
  });

  factory ResponseData.fromJson(Map<String, dynamic> json) {
    return ResponseData(
      id: json['id'] as int,
      inquiryResult: json['inquiryResult'] as String,
      createTime: json['createTime'] as String,
    );
  }
}

解析时的代码实现:

if (response.statusCode == 200) {
  String responseStr = await response.stream.bytesToString();
  Map<String, dynamic> jsonMap = jsonDecode(responseStr);
  // 直接初始化模型类变量,后续取属性有IDE类型提示,不会出错
  InquiryResponse res = InquiryResponse.fromJson(jsonMap);
  // 使用示例
  print(res.msg);
  print(res.data?.inquiryResult);
}

注意事项

  • 解析前先确认服务端返回的JSON根结构是对象还是数组,若为数组,jsonDecode返回的是List类型,需要对应调整解析逻辑
  • 字段取值时建议做空判断和类型校验,避免服务端字段缺失、类型异常导致的App崩溃
  • 若响应结构非常复杂,可使用json_serializable库自动生成序列化代码,减少手写fromJson的工作量

内容的提问来源于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.30 15:18:04