Skip to content
章节导航

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中的数据
    });
  }