Flutter json 踩坑记录

595 阅读1分钟

关键词: json http请求 响应 数据类型 类型转换。

当你使用http(例如dio库)请求,结果后台返回的数据是json时,dart是无法直接使用json的。 甚至你对结果做类型判断

HttpRequest.request("/").then(value){
     if(value is String) {
          print('${value} is string');
      } else if (value is int) {
          print('${value} is int');
      } else if (value is double) {
          print('${value} is double');
      } else {
          print('${value} is other type');
      }
}

你会发现,value什么类型都不是。。。。。。。。 这就到了坑的地方了,网上大部分资料,都是直接教你使用json.decode,结果你无论这么试都是失败,因为这个数据连String都不是,根本无法正确转换成Map或者List。

正确方法是

需要先将响应数据 强制转换成 字符串 类型 然后再通过dart自带的api(需要import 'dart:convert';) json.decode() 将json格式的字符串转换成Map 或者List

HttpRequest.request("/").then(res){
     var value = res.toString();
     Map item = json.decode(value);
}

这样,才算是将响应数据成功转换成Map

今天写项目的时候,又遇到了json的问题,想起当时踩到这个坑,到处找资料和文档,但大多都是含糊不清,所以今天就简单写下最基本的处理办法。当然实际项目中要另外构建个Model类。