Flutter中如何将JSON列表作为HTTP POST请求的Body参数传递
实现方法
核心逻辑是先按照接口要求的结构,在代码中动态组装Dart的Map和List对象,再传入json.encode方法自动序列化即可,不需要硬编码JSON结构。
具体步骤
- 先初始化空列表,用来存放动态生成的备注数据
List<Map<String, dynamic>> dynamicRemarks = [];
- 遍历用户填写的所有表单数据,逐个组装为符合接口要求的结构,加入列表
举个例子,假设你已经把用户填写的内容存在userFormList数组中,每个元素对应一个备注分组,分组下包含多个指标填写项:
// 遍历每个备注分组 for (var formGroup in userFormList) { // 先组装当前分组下的指标列表 List<Map<String, dynamic>> indicators = []; for (var indicatorItem in formGroup['indicators']) { indicators.add({ "name": indicatorItem['name'], "_id": indicatorItem['id'], "remark": indicatorItem['userInputRemark'], "point": indicatorItem['userSelectedPoint'] }); } // 组装当前分组的完整数据,加入动态列表 dynamicRemarks.add({ "_id": formGroup['groupId'], "heading": formGroup['groupTitle'], "Indicators": indicators }); }
- 把原来硬编码的
remarks_data替换为你动态生成的列表即可
request.body = json.encode({ "school_id": "123", "teacher_id": "123", "observer_id": "123", "subject_id": "123", "subject_name": "abc", "class_id": "123", "batch_id": "123", "topic": "topic", "academic_year": "2019-2020", "remarks_data": dynamicRemarks // 替换为动态生成的列表 });
注意事项
- 组装数据时字段名要和接口要求完全匹配,比如示例里的
Indicators首字母为大写,不要写错 - 数值类型字段比如
point要传入int类型,不要用字符串包裹,避免接口解析报错
内容的提问来源于stack exchange,提问作者user16454221
相关产品推荐
相关产品推荐

