首先准备好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)中的使用相关推荐

  1. Flutter Dart 中List的初始化

    List的初始化有多种方式 main(){List<int> myList=[];myList.add(1);print(myList[0]); }

  2. dart开发Android服务,关于android:在Flutter应用中使用由swagger生成的Dart代码生成的Web服务...

    我正在尝试使用Flutter开发一个移动应用程序,我使用swagger生成了包含所有Web服务的Dart文件代码生成.我想从Web服务中获取所有用户的列表. 在屏幕上,我想为每个用户显示:图像,名字, ...

  3. 如何在 Flutter 和 Dart 中检查数字字符串

    如何在 Flutter 和 Dart 中检查数字字符串 数字字符串只是字符串格式的数字. 数字字符串示例: '123', '0.123', '4.234,345', '-33.33', '+44.44 ...

  4. Flutter 开发中最实用的 Dart 语法知识

    零.前言 都说 Flutter 是谷歌的新宠,这段时间有空,就学习了一下 Dart 语法.本篇文章将会详细全面的介绍 Dart 常用语法. 一.变量和常量 在 Drat 语言中,一切皆对象,对象的默认 ...

  5. [Dart] Flutter开发中的几个常用函数

    几个Flutter开发中的常用函数 /** 返回当前时间戳 */static int currentTimeMillis() {return new DateTime.now().millisecon ...

  6. 用Flutter + Dart快速构建一款绝美移动App

    作者 | Wojciech Kuroczycki 译者 | 弯月 来源 | CSDN(ID:CSDNnews) 如今,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不暇接的新 ...

  7. 不用掉一根头发!用 Flutter + Dart 快速构建一款绝美移动 App

    作者 | Wojciech Kuroczycki 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 如今这个时代,与前端或移动相关的新框架层出不穷.所有从事Web开发的人都应该熟悉各种目不 ...

  8. Flutter 动态化 | Flutter + Dart 三端一体化动态化平台实践

    导读 FairPushy 是基于Flutter+Dart三端一体化打造的动态更新平台主要由Web + Server + Native全部使用Flutter+Dart编写,为Flutter动态化场景提供 ...

  9. Flutter --- Dart简介

    一.简介 由Google主导开发,于2011年10月公开.它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言.类似JavaScr ...

最新文章

  1. 基于python的界面自动化测试-Python实现性能自动化测试竟然如此简单
  2. linux下的%zu
  3. conda init 关闭和重启shell_TP5实战源码 通过shell建立PHP守护程序
  4. 关于学习的一则小故事
  5. html中点击照片时放大缩小,基于jquery实现一张图片点击鼠标放大再点缩小
  6. 面试官:讲一下Jvm中如何判断对象的生死?
  7. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 情感分析
  8. mysql 存储过程执行ddl_mysql存储过程执行ddl语句
  9. Mysql索引失效OR语句
  10. springboot酒店客房管理系统设计
  11. 【Pytorch with fastai】第 3 章 :数据伦理
  12. 光标大小怎么调_cad十字光标和坐标系,你必知的几个小技巧!
  13. 2.AZ900资源汇总
  14. 关于Ai打开图片,颜色变色问题
  15. Shiro密码加密 盐值加密
  16. 如何调用大智慧l2数据接口
  17. pythoncanny边缘检测自适应阈值_基于python实现自适应阈值的canny边缘检测
  18. javascript第三天---标签内的属性和数组
  19. 换个格式输出整数(Java)
  20. 物联网省/国赛AIOT智能家居全流程演示

热门文章

  1. 狂神springboot员工管理系统
  2. 【SAP Hana】X-DOC:SAP Hana CDS 开发简介
  3. 富文本编辑器wangEditor的使用(即学即用)
  4. java 多个歌曲_java 多个文件合并,多个 MP3 合并,InputStream 合并
  5. 三周速通AWS Certified Solutions Architect - Associate(SAA-C03)经验分享
  6. Unity将模型显示在UI上面
  7. 算法:递归启蒙-汉诺塔
  8. 设计师找灵感就上这几个网站。
  9. 理解MATLAB GUI运行机制01--gui_mainfcn函数、GUI数据管理机制
  10. 【报告分享】2021年职场心理健康数据洞察报告-贝智(附下载)