期望类型为“List<dynamic>”的值,但得到类型为“_JsonMap”的值

时间:2021-04-19 14:02:38

标签: api flutter dart flutter-web

当我尝试对 json 解码时,我收到错误“期望类型为“列表”的值,但得到类型为“_JsonMap”的值

我的代码:

  static Future<Response<Localizacao>> getLocalizacao(String cep) async {
    await Future.delayed(Duration(milliseconds: 200));
    try {
      Map<String, String> headers = {
        'Authorization': 'Token token=9e034db1f315356f307db682acceb89f'};
      String protocol = 'https://cors-anywhere.herokuapp.com/';
      String uri =
          'https://www.cepaberto.com/api/v3/cep?cep=' + cep;
      final endpoint = "&format=json";
      String url = protocol + uri + endpoint;

      print("url: " + url);
      print("headers: " + headers.toString());

      final response = await http.get(url, headers: headers);
      print(response.statusCode);
      print(response.body);

      if (response.statusCode == 200) {
        print("IF responde==200");
        final json = response.body;
        print("IF rjson");
        List list = (jsonDecode(json) as List<dynamic>) ;
        print("IF converting json");
        final local = list.map<Localizacao>((map) => Localizacao.fromJson(map)).toList();
        print("IF mapping list");
        return Response(true, msg: "OK", result: local[0]);
      } else {
        return Response(false, msg: "Erro ao conectar no web service");
      }
    } catch (e) {
      print("error in getLocalizacao: $e");
      return Response(false, msg: "Erro ao conectar no web service");
    }
  }

List list = (jsonDecode(json) as List) 后不打印; print("IF 转换 json");

我尝试了其他方式,例如:

List list = convert.json.decode(response.body);
List list = convert.json.decode(json);

2 个答案:

答案 0 :(得分:0)

试试这个

 if (response.statusCode == 200) {
        print("IF responde==200");
        final json = response.body;
        print("IF rjson");
        Map<String, dynamic> map= jsonDecode(json) ; 
        print("IF converting json");
        final local = Localizacao.fromJson(map);
        print("IF mapping list");
        return Response(true, msg: "OK", result: local);
      } else {
        return Response(false, msg: "Erro ao conectar no web service");
      }
    } catch (e) {
      print("error in getLocalizacao: $e");
      return Response(false, msg: "Erro ao conectar no web service");
    }

答案 1 :(得分:0)

找出问题所在。

我只需要补充:

final json = "[" + response.body + "]";