前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对 Flutter JSON序列化的一些理解

对 Flutter JSON序列化的一些理解

作者头像
icepy
发布2019-06-24 17:40:18
1.1K0
发布2019-06-24 17:40:18
举报
文章被收录于专栏:子曰五溪

在没有类型检查的语言(JavaScript)中,当你需要从 https://api.github.com/users/icepy 获取数据来更新UI时,最大的可能也就是 JSON.parse 一下,然后直接 data['login'] 来使用,这并不是一个很好的注意。当你开始使用 TypeScript 时,也许你会:

代码语言:javascript
复制
interface IResult {
 login: string;
 id: number;
 node_id: string;
 avatar_url: string;
}

interface IResponse<T> {
 data: T
}

定义这样的接口来描述你将使用的字段名,这会是一个很好的开始。

在 Flutter 的世界里你也可以很简单的去 parse 一下然后使用这些数据,导入 dart:convert即可,在一个简单的例子中我们来展示该如何使用:

代码语言:javascript
复制
import 'dart:convert';

Map<String, dynamic> user = jsonDecode(jsonString);

user['login']user['id']

不过,我们可以将它改造的更有用一些,如果你了解过传统的 MVC 模型,那么你就知道定义一个 Model 会非常有用。让我们接上一个例子,写一个 AVModel 类然后稍微改造一下:

代码语言:javascript
复制
class AVModel {
 final String name;
 final int id;
 final String avatar; AVModel(this.name, this.id, this.avatar); AVModel.fromJSON(Map<String, dynamic> json)
        :id = json['id'],
        name = json['login'],
        avatar = json['avatar_url'];
}Future<Future<String>> dingFuture = new Future(_getAsyncMyUserInfo);

dingFuture.then((done){
 done.then((contents){
   var data = jsonDecode(contents);
   var avModel = AVModel.fromJSON(data);
   _updateUI(avModel);
 });
});

_updateUI(AVModel avModel){
 setState(() {
   _avName = avModel.name;
   _avImage = avModel.avatar;
 });
}

和请求模块一样,Dart Team官方也提供了一个封装程度较高的 package https://pub.dartlang.org/packages/json_annotation。

序列化和反序列化多数的方案都是为了方便管理业务数据而生的,Dart 团队和社区在这方面讨论诸多,我们只需要借鉴和思考哪些方案是适合现阶段的业务,哪些方案是未来可以升级改造的,有时候过度的优化,反而对实现有了太强的约束,合适真的很重要。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子曰五溪 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档