当前位置: 首页 > 知识库问答 >
问题:

_TypeError(类型'List'不是类型'Map'的子类型)颤动

毋澄邈
2023-03-14

我在这里做了一个类似的帖子:问题,但我做了同样的事情,我一直是问题...

我有我的班级:

class PollQuestionsDto {
  int id;
  String entitled;
  int difficulty;
  List<Answer> answers;

  PollQuestionsDto({this.id, this.entitled, this.difficulty, this.answers});

  PollQuestionsDto.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    entitled = json['entitled'];
    difficulty = json['difficulty'];
    if (json['answers'] != null) {
      answers = new List<Answer>();
      json['answers'].forEach((v) {
        answers.add(new Answer.fromJson(v));
      });
    }
  }

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

ask API的方法:

Future<List<PollQuestionsDto>> getPollQuestions() async {
    String url = 'http://10.0.2.2:3000/v1/api/poll/40/question?page=0';
    //String url = 'http://10.0.2.2:3000/v1/api/poll/$idPoll/question?page=0';
    String token = await Candidate().getToken();
    final response = await http.get(url, headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Type': 'application/json; charset=utf-8',
      'Accept': 'application/json',
      'Authorization': 'Bearer $token',
    });
    if (response.statusCode == 200) {
      print(jsonDecode(response.body));
      /*List pollsList = jsonDecode(response.body) ;
      List<PollQuestionsDto> polls = [];
      for (var themeMap in pollsList) {
        polls.add(PollQuestionsDto.fromJson(themeMap));
      }
      print(polls);
      print('Get Poll ${response.body}');*/
    } else {
      throw Exception('Failed get poll questions');
    }
  }

当我询问我的API时,请求的结果是:

{结果:[{id:2,题为:语言利用率是多少?难度:1,答案:[{id:9,题为:Oui,isCorrect:true},{id:10,题为:Non,isCorrect:false}],页码:3,下一步:http://localhost:3000/v1/api/poll/40/question?page=1,先前:}

当我想要在列表中生成结果时,我有相同的错误:

_TypeError(类型“List”不是类型“Map”的子类型)

为什么啊?

共有2个答案

贾飞鸿
2023-03-14

您需要将json['答案']转换为List,如

    if (json['answers'] != null) {
      answers = (json['answers'] as List).map((v) => Answer.fromJson(v)).toList();
    }

最好使用https://pub.dev/packages/json_annotation而不是手动实现toJsonfromJson,除非您有特殊要求。

我能够解析以下字符串

    [
      {
        "id": 1,
        "entitled": "yes",
        "difficulty": 1,
        "answers": [
          {
            "value":"a"
          }
        ]        
      }
    ]

使用

class PollQuestionsDto {
  int id;
  String entitled;
  int difficulty;
  List<Answer> answers;

  PollQuestionsDto({this.id, this.entitled, this.difficulty, this.answers});

  PollQuestionsDto.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    entitled = json['entitled'];
    difficulty = json['difficulty'];
    if (json['answers'] != null) {
      answers = new List<Answer>();
      json['answers'].forEach((v) {
        answers.add(new Answer.fromJson(v));
      });
    }
  }

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

  @override String toString() => toJson().toString();

  static List<PollQuestionsDto> arrayOfQuestionsFromJson(String json) {
    return (jsonDecode(json) as List).map((e) => PollQuestionsDto.fromJson(e)).toList();
  }
}

这是您所期望的吗(当我使用带有一个变量value的Anser类时,您可能需要更改json作为答案)??

陈增
2023-03-14

如果结果是

{
  "results": [
    {
      "id": 2,
      "entitled": "Le langage utilisé sous Flutter est le dart ?",
      "difficulty": 1,
      "answers": [
        {
          "id": 9,
          "entitled": "Oui",
          "isCorrect": true
        },
        {
          "id": 10,
          "entitled": "Non",
          "isCorrect": false
        }
      ]
    }
  ],
  "pageCount": 3,
  "next": "http://localhost:3000/v1/api/poll/40/question?page=1"
}

您需要像这样添加['results']

List pollsList = jsonDecode(jsonstr)['results'];
 类似资料:
  • 我正在学习飞镖和颤振。现在,我尝试将JSON作为一种持久性方法。我犯了很多错误,都是关于类型和内容的。这是我遇到的最新错误:

  • 需要你的帮助解决这个错误在Flutter...也如何在其他屏幕上使用这个回调的实例? 这是我的留言。json数据模型 我的消息是一个模型。飞奔 这是我的留言。飞奔 _TypeError(类型“List”不是类型“Map”的子类型

  • 我对getruangfasiliti方法有问题。有没有办法修复这个错误?我已经为此工作了好几个星期了。 尝试这个,但它不是我想要的。我要得到这个物体的所有数据 下面是我的代码以及如何修复错误。我不知道我的错在哪里 模型Aduan.dart 阿杜安。飞奔 这是我的错误

  • 我正在开发一个依靠API REST调用的flutter应用程序。来自API的响应有点复杂。当调用我的API(例如:api/产品)时,我可以从日志中看到响应:但是我有这个错误: 类型列表 StackTrace: [更新]:退货产品响应。fromJson(response)而不是response ProductsRespository: ProductsBloc: 回应: ApiProvider: 模

  • 我有一个问题,因为2小时。我有这个错误,我看到了更多的主题,但我不能解决它。 消息:_TypeError(类型列表不是类型映射的子类型)颤动 我的模型: 我的主题屏幕: 我尝试了更多的教程和不同的主题,但我有相同的错误。。。 非常感谢。

  • 当我试图获取数据从FIRESTAR,这个异常发生。_TypeError(类型列表不是类型字符串的子类型)我找不到问题的原因。请帮忙。