Flutter请求返回数据序列化和反序列化

2023-11-07

196

问题点

  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<RedirectInfo> redirects ;
  /// 真正请求的url(重定向最终的uri)
  Uri realUri;
  /// 响应对象的自定义字段(可以在拦截器中设置它),调用方可以在`then`中获取.
  Map<String, dynamic> extra;
}

响应数据

https://www.fastmock.site

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

302

接口传入name,返回

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

app 效果

303

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

304

由此可知

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

获取数据时要

response.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

305

json_serializable

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter请求返回数据序列化和反序列化 的相关文章

随机推荐

  • 第5章 K8s基础篇-基本概念

    01 master节点 举个栗子 你启动3个nginx 副本 此时你想扩容至5个 输入完对应命令后 kube apiserver会通通知cm cm实施具体的容器扩缩容操作 02 Node节点 查看kube proxy工作模式 iptable
  • 如何用matplotlib绘制柱状图,并显示超出坐标范围的数据

    最近在处理数据 为了方便展示 需要绘制柱状图进行可视化 数据类似对数正态分布 即数据值越接近均值 数据越多 反之距离均值越远 数据量越少 形式类似于下图 可以看到 大部分数据落在0 10以内 大于10的部分我们不太关心 import num
  • linux下获取本机IPv6地址、前缀、网关

    获取本机IPv6信息命令 cat proc net if inet6 root IT PC 135 home user1 cat proc net if inet6 fe80000000000000922b34fffe4e70f4 02 4
  • libmodbus学习(一)之Modbus RTU-master

    一 Modbus 协议 Modbus簇主要有三种协议 Modbus RTU Modbus ASCII Modbus TCP 工控行业通常的设备组网看 三者应用的范围如下 三者模型区别如下 如上图所示 串行传输的物理层是RS 485或RS 2
  • datagrid传参_12. ajax、datagrid请求传参实例

    实例1 var data data orgRoleCode orgRoleCode data orgRoleName orgRoleName data containRoleIds containRoleIds data remark re
  • 1-问过 chatgpt 的问题(天马行空想问什么问什么)

    这里写目录标题 一 复数的极坐标形式是什么 如何求它的相位角 二 信号分解方法 2 1 了解 Fourier decomposition method 方法吗 具体解释一下它的原理 并给出一些参考文献 2 2 我说的FDM算法是出自 The
  • Unity3D项目程序加密——对dll进行混淆

    这里假设我们在Unity3D里面写的代码抽象成这样一个Test类 里面包含了公开和私有的变量 有自带的Start方法 Update方法和OnGUI方法 还有public private和protected方法 虽然说用抽象类代表了项目里面实
  • MySQL导入与导出.sql文件实操

    你是否对获得MySQL导入与导出 sql文件的实际操作感到无语 如果是这样子的话 此文将会给你相应的解决方案 以下的文章主要是介绍获得MySQL导入与导出 sql文件 的方案 以下就是相关内容的具体描述 一 MySQL的命令行模式的设置 桌
  • c++基础

    C 浅谈 闲暇之际 一直想把自己那些零碎的知识给连贯起来 形成一个体系 所以才决定写点东西来整理下最近半年来的知识点 我想把自己的知识输出才是最高效的学习方法 本博客讲结合我自己本人的实际工作经验 进行浅谈 与诸君分享 共同进步 由于能力有
  • idea java 阿里巴巴_AS 阿里巴巴Java开发规约 CheckStyle-IDEA

    Alibaba Java Coding Guidelines 简介 Alibaba Java Coding Guidelines 是阿里巴巴发布的基于 IDEA 的 Java 开发规约扫描插件 经过247天的持续研发 阿里巴巴于10月14日
  • Jmeter使用教程

    一 Jmeter介绍 二 Jmeter安装教程 1 下载地址 安装之前首先配置Java环境变量 Apache JMeter Download Apache JMeter 根据自己电脑系统来选择合适的安装包即可 2 环境变量配置 配置Jmet
  • java基础:成员变量与局部变量

    java中的变量 在java语言中 根据定义变量的位置不同 可以将变量分为两大类 一类是成员变量 一类是局部变量 由于二者之间存在很大的区别 所以在此介绍 1 成员变量 在类中定义的变量 分为类变量和实例变量两种 在定义类变量的时候 没有s
  • 神经网络学习小记录75——Keras设置随机种子Seed来保证训练结果唯一

    神经网络学习小记录75 Keras设置随机种子Seed来保证训练结果唯一 学习前言 为什么每次训练结果不同 什么是随机种子 训练中设置随机种子 学习前言 好多同学每次训练结果不同 最大的指标可能会差到3 4 这样 这是因为随机种子没有设定导
  • Taro小程序获取DOM元素 - Kaiqisan

    拖更一个月 抱歉 露出肚皮 主要是过年 考研复习 最近没时间写博客 就分享下最近写的项目遇到的问题 观前提示 本篇文章所有内容基于Taro React typescript 我会尽量敲一遍ts代码再敲一遍js代码 快夸我贴心 快o o 并且
  • 一、项目总体介绍以及环境配置

    项目总体介绍以及环境配置 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 项目总体介
  • springboot - 自定义配置类

    拿datasource举栗子 package com example demo config import com alibaba druid pool DruidDataSource import com example demo pro
  • 优先使用对象组合,而不是类继承

    http www cnblogs com nexiyi archive 2013 06 16 3138568 html 极限编程 Extreme programming 的指导原则之一是 只要能用 就做最简单的 一个似乎需要继承的设计常常能
  • [架构之路-216]- 架构 - 概念架构 - 模块(Module)、组件(Component)、包(Package)、对象、函数的区别

    前言 在软件架构中 一个重要的任务就是切分系统 而切分系统进程涉及到一个基本的概念 如模块 Module 组件 Component 包 Package 对象 本文澄清他们的区别 组件 Component 和模块 Module 是一对容易混淆
  • 批量修改以及获取多个CheckBox元素相关处理

    这两天在做一个项目 赶工那个紧啊 每天加班到晚上10点 代码写的头昏脑胀的 但也学到了东西 其中有一点就是JavaScript 相信很多人长时间不用都会见见的忘记 特别是一些不常用的页面元素的处理 例如 Checkbox 单个元素当然是很容
  • Flutter请求返回数据序列化和反序列化

    问题点 请求后返回的数据类型是什么 json decode 接收json字符串 返回数据都要进行toString 吗 接收到返回数据不序列化应该怎么取数值 Dio https github com flutterchina dio blob