请求返回的数据不一致_Flutter请求返回数据序列化和反序列化

370a34b5254b6f09a1158ad31ecaa0ac.png

问题点

  1. 请求后返回的数据类型是什么?
  2. json.decode() 接收json字符串,返回数据都要进行toString()吗?
  3. 接收到返回数据不序列化应该怎么取数值?

Dio

https://github.com/flutterchina/dio/blob/master/README-ZH.md

在dio的请求配置中responseType

  ResponseType responseType;// [responseType] 表示期望以那种格式(方式)接受响应数据。// 目前 [ResponseType] 接受三种类型 `JSON`, `STREAM`, `PLAIN`. 默认值是 `JSON`, 当响应头中content-type为"application/json"时,dio 会自动将响应内容转化为json对象。// 如果想以二进制方式接受响应数据,如下载一个二进制文件,那么可以使用 `STREAM`. 如果想以文本(字符串)格式接收响应数据,请使用 `PLAIN`.

响应数据

{  /// 响应数据,可能已经被转换了类型, 详情请参考Options中的[ResponseType].  T data;  /// 响应头  Headers headers;  /// 本次请求信息  Options request;  /// Http status code.  int statusCode;  /// 是否重定向(Flutter Web不可用)  bool isRedirect;  /// 重定向信息(Flutter Web不可用)  List redirects ;  /// 真正请求的url(重定向最终的uri)  Uri realUri;  /// 响应对象的自定义字段(可以在拦截器中设置它),调用方可以在`then`中获取.  Map extra;}

响应数据

https://www.fastmock.site

fastmock是一款类似于easymock的工具,可生成模拟接口

ee53ad4b9a9f440520a60645f88e7b4f.png


接口传入name,返回

{  "result": {    "name": "test"  }}

app 效果

1f2ead5ae2d6137b49fb565819d4a779.png
  Future getHttp(String inputText) async {    try {      Response response;      var data = {'name': inputText};      response = await Dio().get(        "接口略",        queryParameters: data      );      print('===========获取请求的response data');      print(response.data);      print(response.data is Map);  // true      print('===========获取请求的response.data["result"]');      print(response.data['result']);      print(response.data['result'] is Map);  // true      return response.data['result'];    } catch (e) {      print('==============$e');    }  }
a1ba2e30f639b9c72b62dbb44ca0000b.png

由此可知

若dio responseType默认JSON,接收到的返回数据类型为Map

获取数据时要

brresponse.data['result']['name']

序列化

[key][key][key]...这样取值是不是有点恶心,可将dio的responseType变更为PLAIN,然后获取到string数据序列化成对象

Json_model包

https://github.com/flutterchina/json_model/blob/master/README-ZH.md

  1. 在工程根目录下创建一个名为 "jsons" 的目录;
  2. 创建或拷贝Json文件到"jsons" 目录中 ;
  3. 运行 pub run json_model (Dart VM工程)or flutter packages pub run json_model(Flutter中) 命令生成Dart model类,生成的文件默认在"lib/models"目录下

直接生成model

https://javiercbk.github.io/json_to_dart/

该网站会根据json数据生成model

c1a28794b6dd1e62cd1ecba519916f75.png

json_serializable

https://book.flutterchina.club/chapter11/json_model.html

关注公众号: 页面仔小杨 【实战干货、原创分享】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值