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

Dart中如何解析对象类型JSON列表并创建对应数据模型

Dart解析该JSON列表的实现方案

你接收到的接口返回最外层是数组结构,数组内每个元素包含id(整型)、reason(字符串)两个固定字段,按以下步骤实现解析即可:

1. 定义单条数据的实体模型

先对应数组内的单个对象结构,编写Dart类,附带JSON转换的工厂方法:

class ReturnReason {
  final int id;
  final String reason;

  ReturnReason({required this.id, required this.reason});

  /// 从单个JSON映射对象转换为实体实例
  factory ReturnReason.fromJson(Map<String, dynamic> json) {
    return ReturnReason(
      id: json['id'] as int,
      reason: json['reason'] as String,
    );
  }

  /// 可选:实体转JSON结构,用于后续参数提交场景
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'reason': reason,
    };
  }
}

2. 解析完整列表数据

由于接口返回的根节点就是数组,不存在外层包裹的对象key,直接对原始返回字符串解码后遍历转换即可:

import 'dart:convert';

List<ReturnReason> parseReasonList(String rawResponseBody) {
  // 先解码原始JSON字符串,得到根层级的动态列表
  final List<dynamic> rawList = jsonDecode(rawResponseBody);
  // 逐行转换为类型安全的实体列表
  return rawList
      .map((item) => ReturnReason.fromJson(item as Map<String, dynamic>))
      .toList();
}

适配注意事项

  • 如果接口存在字段返回null的可能,将对应字段的类型修改为可空类型(比如int? id、String? reason),避免强制类型转换抛出异常
  • 如果项目使用json_serializable等自动序列化生成工具,只需要按照单条对象结构编写加了注解的模型类即可,根数组的解析逻辑和手写版本完全一致
  • 不要尝试从根节点取不存在的key(比如data、list这类常见包裹字段),该接口返回没有外层对象包装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:33:25