) => 列表' 离开',arrays,json,flutter,jsonparser"/>

首页 > 解决方案 > Flutter JSON数组解析出错:异常:类型'(动态)=> xxx不是类型'(Map) => 列表' 离开'

问题描述

对不起,如果它重复了这个问题,但我没有找到解决方案。

错误:

例外:类型 '(dynamic) => PostalModel' 不是类型 '(Map<String, dynamic>) => List' of 'f' 的子类型

我做了什么:

  1. 调用 API:

    Future<PostalModel> fetchPhotos(http.Client client) async {
       final response =
        await client.get('https://api.postalpincode.in/pincode/364710');
    
       // Use the compute function to run parsePhotos in a separate isolate.
       return compute(parsePostalPincode, response.body);
    }
    
  2. 解析 JSON:

     // A function that converts a response body into a List.
     PostalModel parsePostalPincode(String responseBody) {
       print(responseBody);
       final parsed = jsonDecode(responseBody).cast<Map<String, dynamic>>();
       print('Parsed : $parsed'); //Getting Log OUTPUT
       PostalModel postalModel = parsed.map<List<PostalModel>>((json) => PostalModel.fromJson(json));
       print('Postal Model : $postalModel'); //Getting Log OUTPUT
       return postalModel;
     }
    
  3. 在正文中绑定数据:

    body: FutureBuilder<PostalModel>(
      future: fetchPhotos(http.Client()),
      builder: (context, snapshot) {
        print('snapshot $snapshot'); // Getting Error Here
        // "AsyncSnapshot<PostalModel>(ConnectionState.done, null, Exception: type '(dynamic) => PostalModel' is not a subtype of type '(Map<String, dynamic>) => List<PostalModel>' of 'f')"
        if (snapshot.hasError) print(snapshot.error);
    
        return snapshot.hasData
           ? PostOfficeList(postOfficeList: snapshot.data.postOffice)
           : Center(child: CircularProgressIndicator());
      },
    ),
    

您可以从 API Link 检查 JSON,我已经从这里创建了一个模型类。

标签: arraysjsonflutterjsonparser

解决方案


API 返回 JSON 数组,而不是 JSON 对象,因此是 List,而不是 Map。

即如果您的模型类名称是用户,用户 JSON 是 JSON 数组的第一个元素。

因此,要获取第一个元素,请使用第一个索引。内部获取信息更新

return Users.fromJson(jsonresponse[0]);

推荐阅读