json 在 Flutter(Dart)中的使用
首先准备好json数据
//一个JSON格式的用户列表字符串
String jsonStr = '[{"name":"Jack"},{"name":"Rose"}]';
//
String jsonStr1 = '{"name": "John Smith","email": "john@example.com"}';
第一种方式:使用集合来操作数据
导入
import 'dart:convert';
使用 json.decode()将JSON字符串转为集合对象json.encode()将集合对象转为JSON字符串
//将JSON字符串转为Dart对象(此处是List)
List items = json.decode(jsonStr);
//输出第一个用户的姓名
print(items[0]["name"]);//Json字符串转Map类型
Map userMap = json.decode(jsonStr1);
print(userMap);//Map转Json字符串
print(json.encode(userMap));
结果:
可以看到,Map类型是不带 双引号的
第二种方式:使用 Model class 操作数据
方法一:自定义 Model ,只是为了弄懂记录一下,不建议实际使用
首先准备好数据:使用上面的 jsonStr1
String jsonStr1 = '{"name": "John Smith","email": "john@example.com"}';//Json字符串转Map类型
Map userMap = json.decode(jsonStr1);
现在针对这个Map 我们自定义一个 Model类:User
class User {String name;String email;User(this.name, this.email);// 把 Map 转为 User 类User.fromJson(Map<String, dynamic> json): name = json['name'],email = json['email'];// 通过User属性,返回一个MapMap<String, dynamic> toJson() =><String, dynamic>{'name': name,'email': email,};
}
使用:
var user = User.fromJson(userMap);
print(user.name);
user.name = "Bob";
// 这里只是把 User 转换 为 Map
print(user.toJson());
// 要 json 格式字符串 还需要使用 json.encode()
print(json.encode(user.toJson()));
结果:
方法二:使用 插件 FlutterJsonBeanFactory 自动生成 Model class
准备数据:
var webInfo = {"name":"网站","num":3,"sites": [{ "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },{ "name":"Runoob", "info":[ "菜鸟教程", "菜鸟工具", "菜鸟微信" ] },{ "name":"Taobao", "info":[ "淘宝", "网购" ] }]
};
生成 Model 类(这里不好截图)
new -> JsonToDartBeanAction,出现:
Make后得到 Model 类:
class WebInfoEntity {int num;String name;List<WebInfoSite> sites;WebInfoEntity({this.num, this.name, this.sites});WebInfoEntity.fromJson(Map<String, dynamic> json) {num = json['num'];name = json['name'];if (json['sites'] != null) {sites = new List<WebInfoSite>();(json['sites'] as List).forEach((v) { sites.add(new WebInfoSite.fromJson(v)); });}}Map<String, dynamic> toJson() {final Map<String, dynamic> data = new Map<String, dynamic>();data['num'] = this.num;data['name'] = this.name;if (this.sites != null) {data['sites'] = this.sites.map((v) => v.toJson()).toList();}return data;}
}class WebInfoSite {String name;List<String> info;WebInfoSite({this.name, this.info});WebInfoSite.fromJson(Map<String, dynamic> json) {name = json['name'];info = json['info']?.cast<String>();}Map<String, dynamic> toJson() {final Map<String, dynamic> data = new Map<String, dynamic>();data['name'] = this.name;data['info'] = this.info;return data;}
}
现在可以使用了:
// 把 json 数据 转换为 WebInfoEntity 类
var w = WebInfoEntity.fromJson(webInfo);
print(w.sites[0].info[2]);
w.sites[0].info[2] = "tianmao";
print(w.toJson()); //Map
结果:
第三种方式:实际从网络获取json数据,并对数据进行操作(集合类型数据)
使用 dio 获取 json 数据
准备数据:
// 返回 json 字符串的网址
final String apiUrl1 = "http://a.itying.com/api/productlist";
使用:
Dio dio = Dio();// 通过 dio get 数据Future _getDio() async {Response response = await dio.get(apiUrl1);print('get --- '+response.data.toString());print(response.data.runtimeType);print(response.data["result"][0]['title']);}
结果:
这个 dio 返回后的数据直接就是 集合类型了,可以直接操作(就不需要使用json.decode()了)
具体返回什么类型的集合,是 dio 根据 json 格式自动判定的,
使用的时候可以先通过 print(response.data.runtimeType); 查看类型,
再决定是直接操作,还是转换为 Model 类
实际应用场景:可以配合 ListView来展示数据等
json 在 Flutter(Dart)中的使用相关推荐
- Flutter Dart 中List的初始化
List的初始化有多种方式 main(){List<int> myList=[];myList.add(1);print(myList[0]); }
- dart开发Android服务,关于android:在Flutter应用中使用由swagger生成的Dart代码生成的Web服务...
我正在尝试使用Flutter开发一个移动应用程序,我使用swagger生成了包含所有Web服务的Dart文件代码生成.我想从Web服务中获取所有用户的列表. 在屏幕上,我想为每个用户显示:图像,名字, ...
- 如何在 Flutter 和 Dart 中检查数字字符串
如何在 Flutter 和 Dart 中检查数字字符串 数字字符串只是字符串格式的数字. 数字字符串示例: '123', '0.123', '4.234,345', '-33.33', '+44.44 ...
- Flutter 开发中最实用的 Dart 语法知识
零.前言 都说 Flutter 是谷歌的新宠,这段时间有空,就学习了一下 Dart 语法.本篇文章将会详细全面的介绍 Dart 常用语法. 一.变量和常量 在 Drat 语言中,一切皆对象,对象的默认 ...
- [Dart] Flutter开发中的几个常用函数
几个Flutter开发中的常用函数 /** 返回当前时间戳 */static int currentTimeMillis() {return new DateTime.now().millisecon ...
- 用Flutter + Dart快速构建一款绝美移动App
作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...
- 不用掉一根头发!用 Flutter + Dart 快速构建一款绝美移动 App
作者 | Wojciech Kuroczycki 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 如今这个时代,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不 ...
- Flutter 动态化 | Flutter + Dart 三端一体化动态化平台实践
导读 FairPushy 是基于Flutter+Dart三端一体化打造的动态更新平台主要由Web + Server + Native全部使用Flutter+Dart编写,为Flutter动态化场景提供 ...
- Flutter --- Dart简介
一.简介 由Google主导开发,于2011年10月公开.它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言.类似JavaScr ...
最新文章
- 基于python的界面自动化测试-Python实现性能自动化测试竟然如此简单
- linux下的%zu
- conda init 关闭和重启shell_TP5实战源码 通过shell建立PHP守护程序
- 关于学习的一则小故事
- html中点击照片时放大缩小,基于jquery实现一张图片点击鼠标放大再点缩小
- 面试官:讲一下Jvm中如何判断对象的生死?
- 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 情感分析
- mysql 存储过程执行ddl_mysql存储过程执行ddl语句
- Mysql索引失效OR语句
- springboot酒店客房管理系统设计
- 【Pytorch with fastai】第 3 章 :数据伦理
- 光标大小怎么调_cad十字光标和坐标系,你必知的几个小技巧!
- 2.AZ900资源汇总
- 关于Ai打开图片,颜色变色问题
- Shiro密码加密 盐值加密
- 如何调用大智慧l2数据接口
- pythoncanny边缘检测自适应阈值_基于python实现自适应阈值的canny边缘检测
- javascript第三天---标签内的属性和数组
- 换个格式输出整数(Java)
- 物联网省/国赛AIOT智能家居全流程演示
热门文章
- 狂神springboot员工管理系统
- 【SAP Hana】X-DOC:SAP Hana CDS 开发简介
- 富文本编辑器wangEditor的使用(即学即用)
- java 多个歌曲_java 多个文件合并,多个 MP3 合并,InputStream 合并
- 三周速通AWS Certified Solutions Architect - Associate(SAA-C03)经验分享
- Unity将模型显示在UI上面
- 算法:递归启蒙-汉诺塔
- 设计师找灵感就上这几个网站。
- 理解MATLAB GUI运行机制01--gui_mainfcn函数、GUI数据管理机制
- 【报告分享】2021年职场心理健康数据洞察报告-贝智(附下载)