' 不是 'String 类型的子类型,flutter"/>

首页 > 解决方案 > Json解析失败_InternalLinkedHashMap' 不是 'String 类型的子类型

问题描述

我想解析这个 API 响应:

{
  "count": 2,
  "next": null,
  "previous": null,
  "results": [
    {
      "image": "https://asasas"
    },
    {
      "image": "https://xxzx"
    }
  ]
}

模型 :

class SliderModel {
  final String count;
  final List<Result> results;

  SliderModel({this.count, this.results});

  factory SliderModel.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['results'] as List;
    List<Result> imagesList = list.map((i) => Result.fromJson(i)).toList();

    return SliderModel(
      count: parsedJson['count'],
      results: imagesList
    );
  }
}

class Result {
  final String image;

  Result({this.image});

  factory Result.fromJson(Map<String, dynamic> parsedJson) {
    return Result(
      image: parsedJson['image']
    );
  }
}

和调用方法:

Future<SliderModel> _loadSlider() async{
    try {
      Response response = await Dio().get("https://dasas/api/slider/");
      print("11111");   // printing 
      SliderModel slider = SliderModel.fromJson(json.decode(response.data));
      print("2222222222222");  // doesn't print throws error
      return slider;
    } catch (e) {
      print("error $e");
    }
  }

当我尝试运行此代码时,它会抛出此消息:

 type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'String' 

标签: flutter

解决方案


看看这个方法:

factory SliderModel.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['results'] as List;
    List<Result> imagesList = list.map((i) => Result.fromJson(i)).toList();

    return SliderModel(
      count: parsedJson['count'],
      results: imagesList
    );
  }

list是一个动态列表(List<dynamic>)。所以在.map它仍然是 List 之后。

解决方案:指定map的返回类型。

List<Result> imagesList = list.map<Result>((i) => Result.fromJson(i)).toList();

推荐阅读