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

JSON转Dart生成代码无效,注释state类后无响应数据问题咨询

问题根因

JSON结构中splitAddress下的state字段为二维字符串数组(List<List<String>>),你使用的在线转换工具无法自动识别多层嵌套的同类型数组结构,生成的类型映射逻辑错误,所以提示生成的Dart代码无效。你注释掉state相关代码后解析逻辑会跳过整个结果映射,因此接口能正常请求但没有数据传递到FutureBuilder的UI渲染层。

解决方法

你可以直接使用下方手动修正后的完整Dart实体类,已适配你给出的JSON结构:

class ApiResponse {
  Result? result;

  ApiResponse({this.result});

  ApiResponse.fromJson(Map<String, dynamic> json) {
    result = json['result'] != null ? Result.fromJson(json['result']) : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    if (result != null) {
      data['result'] = result!.toJson();
    }
    return data;
  }
}

class Result {
  UserDetails? userDetails;
  List<Files>? files;
  EAadhaar? eAadhaar;

  Result({this.userDetails, this.files, this.eAadhaar});

  Result.fromJson(Map<String, dynamic> json) {
    userDetails = json['userDetails'] != null
        ? UserDetails.fromJson(json['userDetails'])
        : null;
    if (json['files'] != null) {
      files = <Files>[];
      json['files'].forEach((v) {
        files!.add(Files.fromJson(v));
      });
    }
    eAadhaar = json['eAadhaar'] != null
        ? EAadhaar.fromJson(json['eAadhaar'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    if (userDetails != null) {
      data['userDetails'] = userDetails!.toJson();
    }
    if (files != null) {
      data['files'] = files!.map((v) => v.toJson()).toList();
    }
    if (eAadhaar != null) {
      data['eAadhaar'] = eAadhaar!.toJson();
    }
    return data;
  }
}

class UserDetails {
  String? digilockerid;
  String? name;
  String? dob;
  String? gender;
  String? eaadhaar;

  UserDetails(
      {this.digilockerid, this.name, this.dob, this.gender, this.eaadhaar});

  UserDetails.fromJson(Map<String, dynamic> json) {
    digilockerid = json['digilockerid'];
    name = json['name'];
    dob = json['dob'];
    gender = json['gender'];
    eaadhaar = json['eaadhaar'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['digilockerid'] = digilockerid;
    data['name'] = name;
    data['dob'] = dob;
    data['gender'] = gender;
    data['eaadhaar'] = eaadhaar;
    return data;
  }
}

class Files {
  String? name;
  String? type;
  String? size;
  String? date;
  String? parent;
  List<String>? mime;
  String? doctype;
  String? description;
  String? issuerid;
  String? issuer;
  String? id;

  Files(
      {this.name,
      this.type,
      this.size,
      this.date,
      this.parent,
      this.mime,
      this.doctype,
      this.description,
      this.issuerid,
      this.issuer,
      this.id});

  Files.fromJson(Map<String, dynamic> json) {
    name = json['name'];
    type = json['type'];
    size = json['size'];
    date = json['date'];
    parent = json['parent'];
    mime = json['mime'].cast<String>();
    doctype = json['doctype'];
    description = json['description'];
    issuerid = json['issuerid'];
    issuer = json['issuer'];
    id = json['id'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['name'] = name;
    data['type'] = type;
    data['size'] = size;
    data['date'] = date;
    data['parent'] = parent;
    data['mime'] = mime;
    data['doctype'] = doctype;
    data['description'] = description;
    data['issuerid'] = issuerid;
    data['issuer'] = issuer;
    data['id'] = id;
    return data;
  }
}

class EAadhaar {
  String? name;
  String? dob;
  String? uid;
  String? gender;
  X509Data? x509Data;
  String? address;
  String? photo;
  SplitAddress? splitAddress;

  EAadhaar(
      {this.name,
      this.dob,
      this.uid,
      this.gender,
      this.x509Data,
      this.address,
      this.photo,
      this.splitAddress});

  EAadhaar.fromJson(Map<String, dynamic> json) {
    name = json['name'];
    dob = json['dob'];
    uid = json['uid'];
    gender = json['gender'];
    x509Data = json['x509Data'] != null
        ? X509Data.fromJson(json['x509Data'])
        : null;
    address = json['address'];
    photo = json['photo'];
    splitAddress = json['splitAddress'] != null
        ? SplitAddress.fromJson(json['splitAddress'])
        : null;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['name'] = name;
    data['dob'] = dob;
    data['uid'] = uid;
    data['gender'] = gender;
    if (x509Data != null) {
      data['x509Data'] = x509Data!.toJson();
    }
    data['address'] = address;
    data['photo'] = photo;
    if (splitAddress != null) {
      data['splitAddress'] = splitAddress!.toJson();
    }
    return data;
  }
}

class X509Data {
  String? validAadhaarDSC;

  X509Data({this.validAadhaarDSC});

  X509Data.fromJson(Map<String, dynamic> json) {
    validAadhaarDSC = json['validAadhaarDSC'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['validAadhaarDSC'] = validAadhaarDSC;
    return data;
  }
}

class SplitAddress {
  List<String>? district;
  List<List<String>>? state;
  List<String>? city;
  String? pincode;
  List<String>? country;
  String? addressLine;

  SplitAddress(
      {this.district,
      this.state,
      this.city,
      this.pincode,
      this.country,
      this.addressLine});

  SplitAddress.fromJson(Map<String, dynamic> json) {
    district = json['district'].cast<String>();
    // 手动适配二维数组结构
    if (json['state'] != null) {
      state = <List<String>>[];
      json['state'].forEach((v) {
        state!.add(v.cast<String>());
      });
    }
    city = json['city'].cast<String>();
    pincode = json['pincode'];
    country = json['country'].cast<String>();
    addressLine = json['addressLine'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['district'] = district;
    data['state'] = state;
    data['city'] = city;
    data['pincode'] = pincode;
    data['country'] = country;
    data['addressLine'] = addressLine;
    return data;
  }
}

使用方法

接口请求成功后直接调用ApiResponse.fromJson(response.data)即可完成解析,解析后的实体可直接传递给FutureBuilder进行UI渲染。

内容的提问来源于stack exchange,提问作者Karthik Nousher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:03:03