Flutter新手求助:如何处理含字符串与数组的单个对象响应?
Flutter 单个API响应对象的处理方案
1. 定义实体类(Entity)
和处理数组时的思路一致,先定义与后端响应字段严格对应的实体类,确保字段名、类型完全匹配:
class CameraEntity { final String camera; final List<String> capacity; CameraEntity({ required this.camera, required this.capacity, }); // 从JSON映射生成实体 factory CameraEntity.fromJson(Map<String, dynamic> json) { return CameraEntity( camera: json['camera'] as String, capacity: List<String>.from(json['capacity'] as List), ); } }
2. 定义模型类(Model)
如果需要在业务层做字段转换或添加逻辑,可以再封装一层Model,和数组处理的分层逻辑保持一致:
class CameraModel { final String cameraSpec; // 重命名字段适配业务 final List<String> storageOptions; CameraModel({ required this.cameraSpec, required this.storageOptions, }); // 从Entity转换为Model factory CameraModel.fromEntity(CameraEntity entity) { return CameraModel( cameraSpec: entity.camera, storageOptions: entity.capacity, ); } // 也可以直接从JSON生成Model(跳过Entity的话用这个) factory CameraModel.fromJson(Map<String, dynamic> json) { return CameraModel( cameraSpec: json['camera'] as String, storageOptions: List<String>.from(json['capacity'] as List), ); } }
3. 请求与解析代码
发起HTTP请求后,直接将JSON字符串解析为单个Map,再转成对应的实体/模型即可(和数组解析的区别是不需要遍历List):
import 'dart:convert'; import 'package:http/http.dart' as http; Future<CameraModel> fetchCameraSpecs() async { final response = await http.get(Uri.parse('你的API接口地址')); if (response.statusCode == 200) { // 将响应体解析为单个Map对象 final jsonMap = jsonDecode(response.body) as Map<String, dynamic>; // 转换为Model return CameraModel.fromJson(jsonMap); } else { throw Exception('请求失败,状态码:${response.statusCode}'); } }
关键注意点
- 单个对象解析不需要处理List遍历,直接操作JSON对应的Map即可
- 对于
capacity这类数组字段,必须用List<String>.from()做类型转换,避免运行时类型错误 - 如果业务逻辑简单,也可以合并Entity和Model为一个类,直接用
fromJson解析
内容的提问来源于stack exchange,提问作者Daniil
相关产品推荐
相关产品推荐

