尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Flutter JSON序列化与反序列化
文章目录Flutter JSON序列化与反序列化概述手写序列化数据模型处理JSON对象处理JSON数组json_serializable添加依赖数据模型生成序列化代码处理JSON对象处理JSON数组嵌套对象处理类型不匹配问题dart_mappable添加依赖数据模型生成序列化代码处理JSON对象处理JSON数组在线网站生成JsonToDart插件生成Flutter JSON序列化与反序列化概述在 Flutter/Dart 开发中网络请求、本地缓存的数据大多为 JSON 格式而 Dart 无法直接操作 JSON 字符串必须通过序列化与反序列化完成数据转换。概念序列化打包流程将业务对象转为可传输/可存储Dart 实体对象 - MapString,dynamic - JSON字符串反序列化解析流程将数据转为业务对象JSON字符串 - MapString,dynamic - Dart 实体对象目前序列化有三种方案手写序列化适合小型项目json_serializable官方推荐适合绝大多数项目dart_mappable第三方库开发迅速手写序列化数据模型classUser{finalint id;finalStringname;finalint age;finalbool sex;User({requiredthis.id,requiredthis.name,requiredthis.age,requiredthis.sex,});factoryUser.fromJson(MapString,dynamicjson){returnUser(id:json[id],name:json[name],age:json[age],sex:json[sex],);}MapString,dynamictoJson(){return{id:id,name:name,age:age,sex:sex};}overrideStringtoString(){returnUser{id:$id, name:$name, age:$age, sex:$sex};}}处理JSON对象StringjsonStr {id: 1,name: 小明,age: 18,sex: true} ;// 反序列化MapString,dynamicuserMapjson.decode(jsonStr);UseruserUser.fromJson(jsonMap);print(user);// 序列化MapString,dynamicuserMapuser.toJson();StringresultJsonjson.encode(userMap);print(resultJson);处理JSON数组StringjsonStr [ {id: 1,name: 小明,age: 18,sex: true}, {id: 2,name: 小白,age: 19,sex: false}, {id: 3,name: 小黑,age: 20,sex: true} ] ;// 反序列化ListdynamicjsonListjson.decode(jsonStr);ListUseruserListjsonList.map((e)User.fromJson(e)).toList();print(userList);// 序列化ListMapString,dynamiclistuserList.map((e)e.toJson()).toList();StringresultJsonjson.encode(list);print(resultJson);json_serializable添加依赖dependencies:json_annotation:^4.9.0dev_dependencies:build_runner:^2.4.0json_serializable:^6.8.0json_annotation提供序列化注解生产依赖build_runnerDart 代码生成工具开发依赖json_serializable序列化代码生成核心开发依赖数据模型importpackage:json_annotation/json_annotation.dart;// 自动生成关联文件必须与文件名一致partusers.g.dart;JsonSerializable()classUser{finalint id;finalStringname;finalint age;finalbool sex;User({requiredthis.id,requiredthis.name,JsonKey(defaultValue:0)requiredthis.age,requiredthis.sex,});// 反序列化工厂方法固定写法factoryUser.fromJson(MapString,dynamicjson)_$UserFromJson(json);// 序列化方法固定写法MapString,dynamictoJson()_$UserToJson(this);}生成序列化代码在项目根目录下执行命令自动生成 .g.dart 代码# 一次性生成代码正式打包前使用 flutter pub run build_runner build # 监听文件变化自动更新代码开发调试首选 flutter pub run build_runner watch # 清理缓存、强制重新生成报错时使用 flutter pub run build_runner build --delete-conflicting-outputs处理JSON对象// 反序列化StringjsonStr {id: 1,name: 小明,age: 18,sex: true} ;MapString,dynamicuserMapjson.decode(jsonStr);UseruserUser.fromJson(userMap);print(user);// 序列化UseruserUser(id:1,name:小明,age:18,sex:true);MapString,dynamicuserMapuser.toJson();StringresultJsonjson.encode(userMap);print(resultJson);处理JSON数组// 反序列化StringjsonStr [ {id: 1,name: 小明,age: 18,sex: true}, {id: 2,name: 小白,age: 19,sex: false}, {id: 3,name: 小黑,age: 20,sex: true} ] ;ListdynamicmapListjson.decode(jsonStr);ListUseruserListmapList.map((e)User.fromJson(e)).toList();print(userList);// 序列化ListUseruserList[User(id:1,name:小明,age:18,sex:true),User(id:2,name:小白,age:19,sex:false),User(id:3,name:小黑,age:20,sex:true),];ListMapString,dynamicmapListuserList.map((e)e.toJson()).toList();StringresultJsonjson.encode(mapList);print(resultJson);嵌套对象// 反序列化StringjsonStr [ {id: 1,name: 小明,age: 18,sex: true,city:[湖北省,武汉市]}, {id: 2,name: 小白,age: 19,sex: false,city:[湖南省,长沙市]}, {id: 3,name: 小黑,age: 20,sex: true,city:[广东省,广州市]} ] ;ListdynamicmapListjson.decode(jsonStr);ListUseruserListmapList.map((e)User.fromJson(e)).toList();print(userList);处理类型不匹配问题// 自定义转换器String转intintstringToInt(dynamicvalue)int.parse(value.toString());JsonSerializable()classUser{JsonKey(fromJson:stringToInt)finalint id;finalStringname;finalint age;finalbool sex;}StringjsonStr {id: 1,name: 小明,age: 18,sex: true} ;MapString,dynamicmapjson.decode(jsonStr);UseruserUser.fromJson(map);print(user);dart_mappabledart_mappable 无需手写固定的 fromJson/toJson自动生成 copyWith、相等判断、toString开发效率更高。添加依赖dependencies:dart_mappable:^4.0.0dev_dependencies:build_runner:^2.4.0数据模型importpackage:dart_mappable/dart_mappable.dart;partusers.mapper.dart;MappableClass()classUserwithUserMappable{finalint id;finalStringname;finalint age;finalbool sex;User(this.id,this.name,this.age,this.sex);}生成序列化代码flutter pub run build_runner build处理JSON对象// 反序列化StringjsonStr {id: 1,name: 小明,age: 18,sex: true} ;UseruserUserMapper.fromJson(jsonStr);print(user);// 序列化UseruserUser(1,小明,18,true);Stringjsonuser.toJson();print(json);处理JSON数组// 反序列化StringjsonStr [ {id: 1, name: 小明, age: 18, sex: true}, {id: 2, name: 小白, age: 19, sex: false} ] ;ListdynamicmapListjson.decode(jsonStr);ListUseruserListmapList.map((e)UserMapper.fromMap(e)).toList();print(userList);// 序列化ListUseruserList[User(1,小白,18,true),User(1,小黑,18,true)];ListStringresultJsonuserList.map((e)e.toJson()).toList();print(resultJson);在线网站生成https://app.quicktype.io/JsonToDart插件生成在AndroidStudio中安装JsonToDart插件然后选定目录点击右键选择New - Json to Dart或快捷键ALT Shift D自动生成Model类。
RELATED

相关推荐

消息刚发出就被撤回?RevokeMsgPatcher 微信/QQ/TIM 防撤回补丁完整指南

消息刚发出就被撤回?RevokeMsgPatcher 微信/QQ/TIM 防撤回补丁完整指南

消息刚发出就被撤回?RevokeMsgPatcher 微信/QQ/TIM 防撤回补丁完整指南 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: ht…

📅 2026/10/6 17:51:51
绵阳网站建设公司揭秘:如何打造高转化率的企业官网并避开营销陷阱

绵阳网站建设公司揭秘:如何打造高转化率的企业官网并避开营销陷阱

在这个互联网普及率极高、信息爆炸的时代,很多绵阳的企业老板或者市场负责人都会面临一个同样的困惑:我的企业到底需不需要做一个官方网站?如果要做,为什么市面上报价从几千块到几十万不等的网站建设公司那么多?为什么有的网站看起来高大上,用户进来却转不动手点击购买或…

📅 2026/10/6 8:13:00
浏览器端vscode docker搭建(附带python环境)

浏览器端vscode docker搭建(附带python环境)

dockerfile from centos:7 #安装python环境 run yum -y install wget openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel zlib-devel libffi-devel gcc make run wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tgz run tar -xvf Python-3.9.0…

📅 2026/10/5 20:21:53
MORE NEWS

更多资讯

📰

Alpha101/191因子平台:EasyXT 101因子分析一站式量化研究方案

【免费下载链接】EasyXT EasyXT是基于miniqmt中xtquant的二次开发封装库,旨在简化xtquant的使用,提供更友好的API接口。通过统一的接口设计、智能参数处理和完善的错误处理,让量化交易开发变得更加简单高效。 项目地址: https://g…

📰

一枚回形针的百年设计:从弹性力学到DIY改造的实用指南

在整理办公桌抽屉的时候,我又一次翻出了半盒落灰的PaperClip——就是回形针。说实话,这东西大概是办公室里存在感最低的物件:用时随手拿一枚,用完随手丢回盒里,谁也不会多看一眼。但如果你愿意认真盯它几秒钟&#xff…

📰

STBC MIMO-OFDM误码率分析:Alamouti编码与仿真避坑指南

简介:这套Matlab仿真代码实现基于STBC的MIMO-OFDM系统误码率分析,面向无线通信方向的学生与科研人员,重点解决多天线OFDM系统在不同调制方式下的性能评估问题。代码支持BPSK、QPSK、8PSK、16PSK四种M-PSK调制,并可在1X1、2X2、4X4…

📰

企业AI能力评价标准:从战略到落地的全方位指南

1. 企业AI能力评价标准的必要性作为AI应用架构师,我经常遇到企业客户提出的困惑:"我们投入了大量资源建设AI能力,但如何判断这些投入是否真正产生了价值?"这正是制定企业AI能力评价标准的核心意义所在。在过去的项目经验…

📰

【珍藏整理】460 张路面积水标注图:VOC 转 YOLO 训练,解压即用

【珍藏整理】460 张路面积水标注图:VOC 转 YOLO 训练,解压即用 【免费下载链接】目标检测标注路面积水检测数据集 本数据集专注于道路积水的目标检测,是针对智能交通、城市管理和自动驾驶领域的一项重要资源。共计包含460幅高质量图片&#x…

📰

【纯免费分享】凸优化入门一站式:Boyd《Convex Optimization》中英双版 + 讲义 + 习题解答

【纯免费分享】凸优化入门一站式:Boyd《Convex Optimization》中英双版 讲义 习题解答 【免费下载链接】凸优化资源合集-Boyd著作中英双语版及学习资料 本仓库汇聚了《Convex Optimization》的宝贵资源,包括Boyd原著的英文版以及王会宁先生翻译的中文版…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬