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属性,返回一个Map
  Map<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来展示数据等

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flutter是一种跨平台的移动应用开发框架可以用于快速构建高性能、美观的应用程序。在Flutter使用JSON(JavaScript Object Notation)来进行数据的序列化和反序列化是非常常见的操作。 要在Flutter使用JSON,可以按照以下步骤进行操作: 1. 定义数据模型:首先,需要定义一个数据模型类来表示JSON数据的结构。可以使用Dart语言提供的类来定义属性和方法。例如,假设有一个名为User的数据模型类,可以定义如下: ```dart class User { final String name; final int age; User({required this.name, required this.age}); factory User.fromJson(Map<String, dynamic> json) { return User( name: json['name'], age: json['age'], ); } Map<String, dynamic> toJson() { return { 'name': name, 'age': age, }; } } ``` 2. 序列化和反序列化:在数据模型类,可以定义一个`fromJson`方法来将JSON数据转换为对象,以及一个`toJson`方法来将对象转换为JSON数据。这两个方法可以使用Dart语言提供的`json`库来实现。例如,在上述的User类,`fromJson`和`toJson`方法的实现如下: ```dart factory User.fromJson(Map<String, dynamic> json) { return User( name: json['name'], age: json['age'], ); } Map<String, dynamic> toJson() { return { 'name': name, 'age': age, }; } ``` 3. 使用JSON数据:一旦定义了数据模型类并实现了序列化和反序列化的方法,就可以在应用程序使用JSON数据了。例如,可以通过以下方式将JSON数据转换为对象: ```dart String jsonStr = '{"name": "John", "age": 25}'; Map<String, dynamic> jsonData = json.decode(jsonStr); User user = User.fromJson(jsonData); ``` 或者将对象转换为JSON数据: ```dart User user = User(name: "John", age: 25); String jsonStr = json.encode(user.toJson()); ``` 这样,就可以方便地在Flutter应用程序使用JSON数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值