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
相关产品推荐
相关产品推荐

