将json string转成Dart Model类
通过上述方式可以将json字符串转换成Map,但Map中存放那些字段在使用的时候很不方便。
为了提高字段获取的效率,目前常用的方案是将json string转成Dart Model类,不仅可以提高字段获取的效率,而且方便字段的后期维护和扩展。
小知识:什么是Dart Model类?
实体类可以理解为一种数据的载体,主要是作为数据管理和业务逻辑处理层面上存在的类别。比如:我们将从数据库中或服务端接口中读取到的用户信息转成一个User类来存储;然后在需要的时候获取User类的属性并将其展示在界面上等。
如何将json string转成Dart Model
- 定义Dart Model
- 将json string转成Map(可借助jsonDecode完成)
- 将Map转成Dart Model
在定义Dart Model前我们先来了解下Dart Model的格式要求:
Dart Model格式要求
- 字段不能为私有(既字段前不能有下划线);
- 普通构造函数;
- 声明为
XXX.fromJson
的命名构造函数; - 声明为
Map<String, dynamic> toJson
成员函数;
其中:命名构造函数为必选。
代码示例:
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;
}
}
Dart Model的使用
定义好Dart Model之后接下来我们来看下如何使用它:
- 使用
dart:convert
中的jsonDecode
将json string转成Map - 通过
DataModel.fromJson
将Map转成Dart Model
代码示例:
//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中的数据
});
}