JSON解析与Dart Model的使用
如何将 json string 转成 Dart Model
- Dart Model格式要求
- 将json string转成Dart Model的几种常见的方式
Dart Model的使用
- 虽然发出网络请求很简单,但如果要使用原始的Future<http.Response>
- 并不简单。为了让我们可以开开心心的写代码,我们可以将http.Response中返回的JSON格式的数据转换成我们自己的Dart对象。
JSON是一种轻量级的数据交换语言,在网络编程中大量的用到了JSON来作为传输数据的格式
如何解析 JSON 数据
- 将 json string 转成 Map
- 将 json string 转成 Dart Model 类
将 json string 转成 Map
- 1、导入dart:convert
shell
import 'dart:convert';- 2、通过
jsonDecode(jsonString)将 json 转成 Map;
shell
import 'dart:convert';//导入`dart:convert`
//json转map并解析数据
void _json2Map() {
var jsonString =
'{"code":0,"data":{"code":0,"method":"GET","requestPrams":"11"},"msg":"SUCCESS."}';
Map<String, dynamic> map = jsonDecode(jsonString);//将json转成Map;
setState(() {
resultShow =
'code: ${map['code']};requestPrams:${map['data']['requestPrams']}';//使用Map中的数据
});
}将 json string 转成 Dart Model 类
- 定义 Dart Model
- 将 json string 转成 Map(可借助 jsonDecode 完成)
- 将 Map 转成 Dart Model
Dart Model格式要求
- 字段不能为私有(既字段前不能有下划线);
- 普通构造函数;
- 声明为XXX.fromJson的命名构造函数;
- 声明为 Map<String, dynamic> toJson 成员函数; 代码示例
shell
class Data {
int? code;
String? method;
String? requestPrams;
Data({this.code, this.method, this.requestPrams});
Data.fromJson(Map<String, dynamic> json) {
code = json['code'];
method = json['method'];
requestPrams = json['requestPrams'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['code'] = code;
data['method'] = method;
data['requestPrams'] = requestPrams;
return data;
}
}将 json string转成Dart Model的几种常见的方式
- 手动转换:适用于简单的 json string;可参考上面的示例代码进行手动转换;
- 在线转换:简单和负责的 json string 都适用(推荐);
借助在线转换的方式更加灵活高效: https://www.geekailab.com/io/tools/json-to-dart/
Dart Model 的使用
- 使用 dart:convert 中的 jsonDecode 将 json string 转成Map
- 通过 DataModel.fromJson 将 Map 转成 Dart Model 示例代码:
shell
//json转Model
void _json2Model() {
var jsonString = '{"code":0,"data":{"code":0,"method":"GET","requestPrams":"11"},"msg":"SUCCESS."}';
Map<String, dynamic> map = jsonDecode(jsonString); //将json转成Map;
DataModel model = DataModel.fromJson(map); //将Map转成Dart Model
setState(() {
resultShow =
'code: ${model.code};requestPrams:${model.data?.requestPrams}'; //使用Map中的数据
});
}
剑鸣秋朔