预期值类型为'List<dynamic>',但实际得到了'_JsonMap'类型

10
当我尝试进行json解码时,出现了错误:期望一个类型为'List'的值,但实际却得到了'_JsonMap'类型的值。
我的代码:
  static Future<Response<Localizacao>> getLocalizacao(String cep) async {
    await Future.delayed(Duration(milliseconds: 200));
    try {
      Map<String, String> headers = {
        'Authorization': 'Token token=9e034db1f315356f30'};
      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;

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

      if (response.statusCode == 200) {

        final json = response.body;

        List list = (jsonDecode(json) as List<dynamic>) ;

        final local = list.map<Localizacao>((map) => Localizacao.fromJson(map)).toList();

        return Response(true, msg: "OK", result: local[0]);
      } else {
        return Response(false, msg: "Erro ao conectar no web service");
      }
    } catch (e) {

      return Response(false, msg: "Erro ao conectar no web service");
    }
  }

我尝试了其他方法,比如:

List list = convert.json.decode(response.body);
List list = convert.json.decode(json);
2个回答

10

找出问题所在。

我只需要添加:

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

1

试试这个

 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");
    }

{"altitude":934.0,"cep":"82320520","latitude":"-25.3578899846","longitude":"-49.1953695819","logradouro":"Rua Ângela Budel","bairro":"Butiatuvinha","cidade":{"ddd":41,"ibge":"4106902","nome":"Curitiba"},"estado":{"sigla":"PR"}}这是响应体的返回。我需要获取“纬度”和“经度”,当我按照你说的去做时,我得到了:“预期值为'List<dynamic>'类型,但实际上是'String'类型”。 - Johnny
是的,因为response.data['latitude']是字符串。而且,你为什么期望一个列表呢?你已经有了字符串格式的纬度和经度数值。 - Sanjeev Madhav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接