首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图将json响应转换为dart代码,但给出了2个错误。

试图将json响应转换为dart代码,但给出了2个错误。
EN

Stack Overflow用户
提问于 2022-06-10 10:30:03
回答 4查看 211关注 0票数 0

我正在尝试将JSON响应转换为dart,但是有两个错误

'dynamic‘类型的值不能赋值给'List’类型的变量,参数类型'dynamic‘不能分配给参数类型'Map’

密码。

代码语言:javascript
运行
复制
class GetImProfileDetails {
  List<Params>? params;
  String? status;
  String? statusDesc;

  GetImProfileDetails({this.params, this.status, this.statusDesc});

  GetImProfileDetails.fromJson(Map<String, dynamic> json) {
    if (json['params'] != null) {
      params = <Params>[];
      json['params'].forEach((v) {
        params!.add(new Params.fromJson(v)); // Second Error on V
      });
    }
    status = json['status'] as String;
    statusDesc = json['statusDesc'] as String;
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.params != null) {
      data['params'] = this.params!.map((v) => v.toJson()).toList();
    }
    data['status'] = this.status;
    data['statusDesc'] = this.statusDesc;
    return data;
  }
}

class Params {
  String? head;
  String? headCode;
  List<String>? options;

  Params({this.head, this.headCode, this.options});

  Params.fromJson(Map<String, dynamic> json) {
    head = json['head'] as String;
    headCode = json['headCode'] as String;
    options = json['options'].cast<String>(); // First Error
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['head'] = this.head;
    data['headCode'] = this.headCode;
    data['options'] = this.options;
    return data;
  }
}

我的JSON回复

代码语言:javascript
运行
复制
{
    "params": [
        {
            "head": "Age",
            "headCode": "AG",
            "options": [
                "AG3~Others~1",
                "AG2~45-55~0",
                "AG1~30-45~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Annual Income",
            "headCode": "AI",
            "options": [
                "AI4~>12lacs~1",
                "AI3~<4lacs~0",
                "AI2~8-12lacs~0",
                "AI1~4-8lacs~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Education",
            "headCode": "EDU",
            "options": [
                "EDU4~Post Graduate~1",
                "EDU3~Graduate~0",
                "EDU2~Class XII~0",
                "EDU1~Class X~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Present Occupation ",
            "headCode": "PO",
            "options": [
                "PO9~Financial Advisor~0",
                "PO8~Employee/owner of corporate client~0",
                "PO7~DoctorA  ~0",
                "PO6~DST~0",
                "PO5~DSA~0",
                "PO4~Competition Agent~0",
                "PO3~Career Agent~0",
                "PO27~Used Car DealerA  ~0",
                "PO26~Unemployed~0",
                "PO25~Transporter~0",
                "PO24~Student~0",
                "PO23~Stock Broker ~0",
                "PO22~Service~0",
                "PO21~Self-Employed~1",
                "PO20~Salaried~0",
                "PO2~Business~0",
                "PO19~RTO agent~0",
                "PO18~Project ConsultantA  ~0",
                "PO17~Part Time~0",
                "PO16~Other financial services~0",
                "PO15~New Car DealerA  ~0",
                "PO14~LI Agent~0",
                "PO13~Housewife~0",
                "PO12~Garage~0",
                "PO11~GI-PVT~0",
                "PO10~GI-PSU~0",
                "PO1~Aggregator~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Health PSU Experience",
            "headCode": "HPSUE",
            "options": [
                "HPSUE5~> 10 Years~1",
                "HPSUE4~5-10years~0",
                "HPSUE3~2-5Years~0",
                "HPSUE2~1-2 Years~0",
                "HPSUE1~0-1year~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Health Pvt Experience",
            "headCode": "HPVTE",
            "options": [
                "HPSUE9~5-10years~1",
                "HPSUE8~2-5Years~0",
                "HPSUE7~1-2 Years~0",
                "HPSUE6~0-1year~0",
                "HPSUE10~> 10 Years~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "LI PSU Experience",
            "headCode": "LPSUE",
            "options": [
                "LPSUE5~> 10 Years~1",
                "LPSUE4~5-10years~0",
                "LPSUE3~2-5Years~0",
                "LPSUE2~1-2 Years~0",
                "LPSUE1~0-1year~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "LI Pvt Experience",
            "headCode": "LPVTE",
            "options": [
                "LPSUE9~5-10years~1",
                "LPSUE8~2-5Years~0",
                "LPSUE7~1-2 Years~0",
                "LPSUE6~0-1year~0",
                "LPSUE10~> 10 Years~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "No. of years in the city",
            "headCode": "NYIC",
            "options": [
                "NYIC3~> 7 Years~1",
                "NYIC2~<3 Years~0",
                "NYIC1~3-7 Years~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "GI Annual Potential",
            "headCode": "GANP",
            "options": [
                "GANP7~>100 lakhs~1",
                "GANP6~<3 lakhs~0",
                "GANP5~50-100 lakhs~0",
                "GANP4~5-10 lakhs~0",
                "GANP3~3-5 lakhs~0",
                "GANP2~25-50 lakhs~0",
                "GANP1~10-25 lakhs~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Health Annual Potential",
            "headCode": "HANP",
            "options": [
                "HANP7~>100 lakhs~1",
                "HANP6~<3 lakhs~0",
                "HANP5~50-100 lakhs~0",
                "HANP4~5-10 lakhs~0",
                "HANP3~3-5 lakhs~0",
                "HANP2~25-50 lakhs~0",
                "HANP1~10-25 lakhs~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Motor Annual Potential",
            "headCode": "MAP",
            "options": [
                "MAP7~>100 lakhs~1",
                "MAP6~<3 lakhs~0",
                "MAP5~50-100 lakhs~0",
                "MAP4~5-10 lakhs~0",
                "MAP3~3-5 lakhs~0",
                "MAP2~25-50 lakhs~0",
                "MAP1~10-25 lakhs~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "Potential Club",
            "headCode": "PC",
            "options": [
                "PC5~Silver~0",
                "PC4~Platinum~0",
                "PC3~Partner~0",
                "PC2~Gold~1",
                "PC1~CEO~0",
                "999999~Select~0"
            ]
        },
        {
            "head": "SME Annual Potential",
            "headCode": "SNP",
            "options": [
                "SNP7~>100 lakhs~1",
                "SNP6~<3 lakhs~0",
                "SNP5~50-100 lakhs~0",
                "SNP4~5-10 lakhs~0",
                "SNP3~3-5 lakhs~0",
                "SNP2~25-50 lakhs~0",
                "SNP1~10-25 lakhs~0",
                "999999~Select~0"
            ]
        }
    ],
    "status": "Success",
    "statusDesc": "1"
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-06-13 11:39:33

试着用下面的方法。我重写了几个地方,我认为你在做一些不正确或没有效率的事情:

代码语言:javascript
运行
复制
class GetImProfileDetails {
  List<Params>? params;
  String? status;
  String? statusDesc;

  GetImProfileDetails({this.params, this.status, this.statusDesc});

  GetImProfileDetails.fromJson(Map<String, dynamic> json) {
    if (json['params'] != null) {
      params = [
        for (Map<String, dynamic> paramsMap in json['params'])
          Params.fromJson(paramsMap)
      ];
    }
    status = json['status'] as String;
    statusDesc = json['statusDesc'] as String;
  }

  Map<String, Object?> toJson() => {
        'params': params,
        'status': status,
        'statusDesc': statusDesc,
      };
}

class Params {
  String? head;
  String? headCode;
  List<String>? options;

  Params({this.head, this.headCode, this.options});

  Params.fromJson(Map<String, dynamic> json) {
    head = json['head'] as String;
    headCode = json['headCode'] as String;
    options = (json['options'] as List).cast<String>();
  }

  Map<String, Object?> toJson() => {
        'head': head,
        'headCode': headCode,
        'options': options,
      };
}

关于toJson()方法的一个一般注意事项是,您应该只返回一些可以被JSON编码的内容。Dart还将自动尝试对任何不能以JSON格式直接使用的对象调用toJson()。因此,您的GetImProfileDetails.toJson()可以返回一个包含Params列表的对象,因为Dart随后将在每个Params上调用Params.toJson()

票数 1
EN

Stack Overflow用户

发布于 2022-06-10 11:05:24

要解决第二个错误,如果认为您必须这样做:

代码语言:javascript
运行
复制
json['params'].forEach((Map<String, dynamic> v) { //rest of code 
票数 0
EN

Stack Overflow用户

发布于 2022-06-13 11:39:27

试着用这个替换类参数。

代码语言:javascript
运行
复制
class Params {
  String head;
  String headCode;
  List options;

  Params({this.head, this.headCode, this.options});

  Params.fromJson(Map<String, dynamic> json) {
    head = json['head'] as String;
    headCode = json['headCode'] as String;
    options = json['options'] as List; // First Error
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['head'] = this.head;
    data['headCode'] = this.headCode;
    data['options'] = this.options;
    return data;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72572815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档