Flutter中如何从嵌套JSON提取指定字段的图片文件路径?
Flutter中提取指定JSON字段的图片路径方法
针对你提供的嵌套JSON结构,要提取Aadhaar、Pan Card和Business Ownership Proof对应的图片路径,可通过以下两种方法实现:
方法一:手动解析Map(快速实现)
Flutter内置的dart:convert包可直接将JSON字符串转为Map<String, dynamic>,逐层取值即可:
import 'dart:convert'; void extractImagePaths(String jsonResponse) { // 将JSON字符串转为Map final Map<String, dynamic> responseMap = jsonDecode(jsonResponse); // 获取顶层data节点 final Map<String, dynamic> data = responseMap['data'] as Map<String, dynamic>; // 提取Pan Card的图片路径 final List<dynamic> panImagePaths = data['pan']?['files'] ?? []; // 提取Aadhaar的图片路径 final List<dynamic> aadharImagePaths = data['aadhar']?['files'] ?? []; // 提取Business Ownership Proof的图片路径(对应JSON中的ownership节点) final List<dynamic> ownershipImagePaths = data['ownership']?['files'] ?? []; // 打印或使用路径 print('Pan图片路径: $panImagePaths'); print('Aadhaar图片路径: $aadharImagePaths'); print('Business Ownership图片路径: $ownershipImagePaths'); }
说明:
- 用
?操作符避免节点不存在时抛出空指针异常 - 用
?? []给空值设置默认空数组,保证后续处理不会报错
方法二:使用模型类(规范开发,适合大型项目)
通过json_serializable包生成序列化/反序列化代码,将JSON转为实体类,提升代码可读性和可维护性:
1. 添加依赖
在pubspec.yaml中添加依赖:
dependencies: json_annotation: ^4.8.1 dev_dependencies: build_runner: ^2.4.4 json_serializable: ^6.7.0
2. 创建模型类
创建verification_models.dart文件:
import 'package:json_annotation/json_annotation.dart'; part 'verification_models.g.dart'; @JsonSerializable() class VerificationResponse { final Map<String, dynamic>? data; final bool? status; VerificationResponse({this.data, this.status}); factory VerificationResponse.fromJson(Map<String, dynamic> json) => _$VerificationResponseFromJson(json); } // Pan子模型 @JsonSerializable() class PanDocument { final List<dynamic>? files; PanDocument({this.files}); factory PanDocument.fromJson(Map<String, dynamic> json) => _$PanDocumentFromJson(json); } // Aadhaar子模型 @JsonSerializable() class AadharDocument { final List<dynamic>? files; AadharDocument({this.files}); factory AadharDocument.fromJson(Map<String, dynamic> json) => _$AadharDocumentFromJson(json); } // Business Ownership子模型 @JsonSerializable() class OwnershipDocument { final List<dynamic>? files; OwnershipDocument({this.files}); factory OwnershipDocument.fromJson(Map<String, dynamic> json) => _$OwnershipDocumentFromJson(json); }
3. 生成序列化代码
在终端执行命令:
flutter pub run build_runner build
4. 解析JSON并提取路径
import 'dart:convert'; import 'verification_models.dart'; void extractImagePathsWithModel(String jsonResponse) { final VerificationResponse response = VerificationResponse.fromJson(jsonDecode(jsonResponse)); final PanDocument? panDoc = response.data?['pan'] != null ? PanDocument.fromJson(response.data!['pan'] as Map<String, dynamic>) : null; final AadharDocument? aadharDoc = response.data?['aadhar'] != null ? AadharDocument.fromJson(response.data!['aadhar'] as Map<String, dynamic>) : null; final OwnershipDocument? ownershipDoc = response.data?['ownership'] != null ? OwnershipDocument.fromJson(response.data!['ownership'] as Map<String, dynamic>) : null; final List<dynamic> panPaths = panDoc?.files ?? []; final List<dynamic> aadharPaths = aadharDoc?.files ?? []; final List<dynamic> ownershipPaths = ownershipDoc?.files ?? []; // 使用路径 print('Pan图片路径: $panPaths'); print('Aadhaar图片路径: $aadharPaths'); print('Business Ownership图片路径: $ownershipPaths'); }
内容的提问来源于stack exchange,提问作者Minal Suryawanshi
相关产品推荐
相关产品推荐

