繁体   English   中英

Flutter - Dart 解析 json 数据数组返回类型&#39;List<dynamic> &#39; 不是类型 &#39;List 的子类型<BusinessTest> &#39;

[英]Flutter - Dart parsing json data array returns type 'List<dynamic>' is not a subtype of type 'List<BusinessTest>'

我正在尝试使用自定义模型解析 json 文件,我总是得到错误type 'List<dynamic>' is not a subtype of type 'List<BusinessTest>'而且我不知道如何修复我的代码. 在解析 json 文件时,始终在变量中使用可为空的类型也是一个好主意吗?

这是我的数据的 Json 示例:

{
    "businesses": [{
            "id": "1",
            "alias": "123",
            "name": "aaa",
            "image_url": "xxx.jpg",
            "is_closed": false,
            "url": ".com",
            "review_count": 26,
            "rating": 5.0
        },
        {
            "id": "2",
            "alias": "123",
            "name": "aaa",
            "image_url": "xxx.jpg",
            "is_closed": false,
            "url": ".com",
            "review_count": 26,
            "rating": 5.0
        }
    ]
}

这是我为解析 Json 而制作的模型代码:

class BusinessSearch {
  final List<BusinessTest> businesses;
  final int total;

  BusinessSearch(this.businesses, this.total);

  BusinessSearch.fromJson(Map<String, dynamic> json)
      : businesses = json['businesses'],
        total = json['total'];
}

class BusinessTest {
  final String? name;
  final String? imageUrl;
  final bool? isClosed;
  final String? url;
  final int? reviewCount;

  BusinessTest(
      this.name, this.imageUrl, this.isClosed, this.url, this.reviewCount);

  BusinessTest.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        imageUrl = json['image_url'],
        isClosed = json['is_closed'],
        url = json['url'],
        reviewCount = json['review_count'];
}
 

这就是我试图解析它的方式:

void getData() async {
    try {
      String url =  'url';

      NetworkHelp network = NetworkHelp(url: url);
      var data = await network.getData();

      Map<String, dynamic> businessMap = await jsonDecode(data);
      var business = BusinessSearch.fromJson(businessMap);

    } catch (e) {
      print(e);
    }
  }

您必须像这样更新您的BusinessSearch模型。

class BusinessSearch {
    BusinessSearch({
        this.businesses,
        this.total,
    });

    List<Business> businesses = [];
    int total;

    factory BusinessSearch.fromJson(Map<String, dynamic> json) => BusinessSearch(
        businesses: List<Business>.from(json["businesses"].map((x) => Business.fromJson(x))),
        total: json['total']
    );

    Map<String, dynamic> toJson() => {
        "businesses": List<dynamic>.from(businesses.map((x) => x.toJson())),
        "total": total,
    };
}

class Business {
    Business({
        this.id,
        this.alias,
        this.name,
        this.imageUrl,
        this.isClosed,
        this.url,
        this.reviewCount,
        this.rating,
    });

    String id;
    String alias;
    String name;
    String imageUrl;
    bool isClosed;
    String url;
    int reviewCount;
    int rating;

    factory Business.fromJson(Map<String, dynamic> json) => Business(
        id: json["id"],
        alias: json["alias"],
        name: json["name"],
        imageUrl: json["image_url"],
        isClosed: json["is_closed"],
        url: json["url"],
        reviewCount: json["review_count"],
        rating: json["rating"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "alias": alias,
        "name": name,
        "image_url": imageUrl,
        "is_closed": isClosed,
        "url": url,
        "review_count": reviewCount,
        "rating": rating,
    };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM