Flutter中嵌套JSON对象的实体类创建及fromJson/toJson实现
Flutter嵌套JSON实体类绑定解决方案
1. 定义嵌套实体类
针对包含drivers_license这类嵌套对象的JSON,需要先定义内层实体类,再在外层类中引用它,同时实现对应的fromJson/toJson方法处理嵌套转换。
假设接口返回的JSON结构如下:
{ "id": 1, "name": "John Doe", "drivers_license": { "license_number": "ABC123", "expiry_date": "2028-12-31", "issuing_state": "CA" } }
对应的实体类代码:
// 内层:驾照信息实体类 class DriversLicense { final String licenseNumber; final String expiryDate; final String issuingState; DriversLicense({ required this.licenseNumber, required this.expiryDate, required this.issuingState, }); // 从JSON解析为对象 factory DriversLicense.fromJson(Map<String, dynamic> json) { return DriversLicense( licenseNumber: json['license_number'], expiryDate: json['expiry_date'], issuingState: json['issuing_state'], ); } // 将对象转换为JSON Map<String, dynamic> toJson() { return { 'license_number': licenseNumber, 'expiry_date': expiryDate, 'issuing_state': issuingState, }; } } // 外层:服务提供者实体类 class ServiceProviderModel { final int id; final String name; final DriversLicense? driversLicense; // 标记为可选类型,兼容JSON中无该字段的情况 ServiceProviderModel({ required this.id, required this.name, this.driversLicense, }); factory ServiceProviderModel.fromJson(Map<String, dynamic> json) { return ServiceProviderModel( id: json['id'], name: json['name'], // 处理嵌套对象:先判断是否存在,再调用内层类的fromJson方法 driversLicense: json['drivers_license'] != null ? DriversLicense.fromJson(json['drivers_license']) : null, ); } Map<String, dynamic> toJson() { return { 'id': id, 'name': name, 'drivers_license': driversLicense?.toJson(), }; } }
2. 接口解析与属性访问示例
调用getall接口后,按如下方式解析并访问嵌套对象属性:
import 'dart:convert'; // 假设接口返回的响应体为responseBody final Map<String, dynamic> responseData = jsonDecode(responseBody); ServiceProviderModel provider = ServiceProviderModel.fromJson(responseData); // 访问嵌套对象的属性(注意空安全判断) print(provider.driversLicense?.licenseNumber); // 输出:ABC123 print(provider.driversLicense?.expiryDate); // 输出:2028-12-31
3. 常见问题排查
- 确保JSON中的键名与
fromJson方法中使用的键完全匹配(比如drivers_license是下划线命名,不要误写成驼峰的driversLicense) - 如果嵌套对象可能为null,外层类中对应的属性必须声明为可选类型(加
?),避免空指针异常 - 若接口返回的是数组列表,用以下方式批量解析:
final List<dynamic> listData = jsonDecode(responseBody); List<ServiceProviderModel> providers = listData.map((item) => ServiceProviderModel.fromJson(item)).toList();
内容的提问来源于stack exchange,提问作者Madusha Prasad
相关产品推荐
相关产品推荐

