You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:01:12