JSON解析与Dart Model的使用

在Flutter中处理JSON数据并转换为Dart Model

AvatarYuan·2024-11-29·28

将json string转成Dart Model类

通过上述方式可以将json字符串转换成Map,但Map中存放那些字段在使用的时候很不方便。

为了提高字段获取的效率,目前常用的方案是将json string转成Dart Model类,不仅可以提高字段获取的效率,而且方便字段的后期维护和扩展。

小知识:什么是Dart Model类?

实体类可以理解为一种数据的载体,主要是作为数据管理和业务逻辑处理层面上存在的类别。比如:我们将从数据库中或服务端接口中读取到的用户信息转成一个User类来存储;然后在需要的时候获取User类的属性并将其展示在界面上等。

如何将json string转成Dart Model

  1. 定义Dart Model
  2. 将json string转成Map(可借助jsonDecode完成)
  3. 将Map转成Dart Model

在定义Dart Model前我们先来了解下Dart Model的格式要求:

Dart Model格式要求

  1. 字段不能为私有(既字段前不能有下划线);
  2. 普通构造函数;
  3. 声明为XXX.fromJson的命名构造函数;
  4. 声明为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之后接下来我们来看下如何使用它:

  1. 使用dart:convert 中的jsonDecode将json string转成Map
  2. 通过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中的数据
    });
  }