【问题标题】:Expected a value of type 'List<dynamic>', but got one of type '_JsonMap'需要一个“List<dynamic>”类型的值,但得到一个“_JsonMap”类型的值
【发布时间】:2021-07-13 17:45:24
【问题描述】:

当我尝试 json 解码时,我收到错误 Expected a value of type 'List', but got one of type '_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);

【问题讨论】:

    标签: api flutter dart flutter-web


    【解决方案1】:

    找出问题所在。

    我只需要添加:

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

    【讨论】:

      【解决方案2】:

      试试这个

       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'类型的值,但得到一个'String'类型的值
      • 是的,因为 response.data['latitude'] 是字符串。另外,你为什么期待 List.您已经在字符串中拥有纬度、经度值
      猜你喜欢
      • 2021-12-17
      • 2021-11-03
      • 2021-10-23
      • 2023-01-02
      • 2021-11-12
      • 2021-06-12
      • 2021-11-02
      • 2020-12-03
      • 2021-11-04
      相关资源
      最近更新 更多