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

获取类型“List”不是JSON中类型“Map”错误的子类型

亢胤运
2023-03-14

我相信你知道上面的问题。我想知道我怎样才能解决它。我知道我的数据是列表形式的,但在我使用的数据类map中。我真的不明白我应该如何改变它的工作,基本上我只是跟随颤振。开发文档

如果你想知道我做了什么

我基本上是用json_serializable解析数据的。在使用测试数据进行的测试中,所有测试都运行良好。

我的数据:

我的模型包含一个标题,图像

`import 'package:json_annotation/json_annotation.dart';

import 'modelData.dart';


part 'Modell.g.dart';

@JsonSerializable(explicitToJson: true)
class Modell {
  final String title;
  final String image;
  final ModelData modelData;

  Modell(this.title, this.image, this.modelData);

  factory Modell.fromJson(Map<String, dynamic> json)
  => _$ModellFromJson(json);
  Map<String, dynamic> toJson() => _$ModellToJson(this);}

`

    import 'package:json_annotation/json_annotation.dart';


part 'modelData.g.dart';

@JsonSerializable()
class ModelData {
  final String title;

  ModelData(this.title);

  factory ModelData.fromJson(Map<String, dynamic> json)
  => _$ModelDataFromJson(json);
  Map<String, dynamic> toJson() => _$ModelDataToJson(this);
}

我正在使用以下代码使用数据:

      var modelle = const[];

  Future loadDataList() async {
    String content = await rootBundle.loadString("assets/ddddddd.json");
    List collection = json.decode(content);
    List<Modell> _modelle = collection.map((json) => Modell.fromJson(json)).toList();

    setState(() {
      modelle = _modelle;
    });
  }

  void initState() {
    loadDataList();
    super.initState();
   [
   {
      "title":" Alfa Romeo ",
      "image":" AlfaRomeo.png ",
      "modelData":[
         {
            "title":" 4C ",
            "variantenData":[
               
            ]
         },

我希望我写得清楚

-----更新-----

我测试了一下

    import 'package:json_annotation/json_annotation.dart';

import 'modelData.dart';


part 'Modell.g.dart';

@JsonSerializable(explicitToJson: true)
class Modell {
  final String title;
  final String image;
  List <ModelData> modelData; //adding List

  Modell(this.title, this.image, this.modelData);

  factory Modell.fromJson(Map<String, dynamic> json)
  => _$ModellFromJson(json);
  Map<String, dynamic> toJson() => _$ModellToJson(this);
}

共有2个答案

凌啸
2023-03-14

在本部分:

  var modelle = const[];

  Future loadDataList() async {
    String content = await rootBundle.loadString("assets/ddddddd.json");
    List collection = json.decode(content);
    List<Modell> _modelle = collection.map((json) => Modell.fromJson(json)).toList();

    setState(() {
      modelle = _modelle;
    });
  }

  void initState() {
    loadDataList();
    super.initState();

具体如下:

List collection = json.decode(content);

如果转到颤振示例,您将看到集合将返回一个贴图

尝试更改为:

Map<String, dynamic> collection = json.decode(content);

鄂昌胤
2023-03-14

您已经分析了数据,除了名为Modell的类之外,所有类都应该包含一个ModelData列表,而不是单个ModelData。请将类型更改为ModelData列表,希望它能正常工作。

class Modell {
  final String title;
  final String image;
  final List<ModelData> modelDataList;

  Modell(this.title, this.image, this.modelDataList);

  factory Modell.fromJson(Map<String, dynamic> json)
  => _$ModellFromJson(json);
  Map<String, dynamic> toJson() => _$ModellToJson(this);}```
 类似资料:
  • 我正在解码一个响应体,我得到了错误: 我正在解析JSON对象的JSON数组,其中一个字段也是对象列表,我怀疑我的问题源于此。我也在使用json_serializable库。下面是我的代码,我省略了一些字段,更改了一些变量名称,但它代表相同的代码: 从。json_serializable生成的g dart文件(将编码部分复制): 这是我未来的职能:

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

  • 我正在使用flatter构建一个事件应用程序,它从Rails api获取数据并显示其细节。我犯了与这个问题相同的错误,并且已经尝试了“kapsid”的答案,但还不能解决。 我的模型类(evento.dart)。基本上,它代表一个较大的事件,其中包含多个小事件。 main.dart列举各种类似的大型活动 这是示例JSON 我做错了什么??

  • 我正在学习飞镖和颤振。现在,我尝试将JSON作为一种持久性方法。我犯了很多错误,都是关于类型和内容的。这是我遇到的最新错误:

  • 我试图加载数据从我的strapi数据库列表,即:http://localhost:1337/products下面是一个示例数据从我的数据库: [{“picture”:[{“_id”:“602d327fe790253a44f466e7”,“name”:“petromax.png”,“alternativeText”:“caption”:“hash”:“petromax_14618; add72”,“

  • 我怎样才能解决这个问题?? 编辑:“extractedData”是映射,如何将其转换为列表以添加到“final List loadedProducts=[];”中? 对于要求的帖子:“看起来你的帖子大部分是代码,请添加更多细节。”“看起来您的帖子大部分是代码;请添加更多详细信息。” 输出: