flutter-解析json

在android中可以使用Gson直接对网络请求返回的json进行格式化,首先这种方法是flutter中是不可行的。

在flutter中对于网络请求返回的json,需要自己写方法来解析。可以自己手动来解析,但是当json层级很大的时候,就非常麻烦。

https://pub.dev/packages/json_serializable#-example-tab-

上面的json_serialzable可以实现json和model之间的相互转化。

第一步:导包,两个包

        1.上面的json_serializable

        2.build_runner  https://pub.dev/packages/build_runner#-changelog-tab-,导入这个时候可能会提示你的dart sdk版本低的问题,自行去GitHub找合适的版本

第二步:创建model

      自行根据你的json,创建合适的model,建好如下(此时会报错,不用管)

import 'package:json_annotation/json_annotation.dart';
import 'QiangGouItemBean.dart';

part 'GetRushListBean.g.dart';

///这个标注是告诉生成器,这个类是需要生成Model类的
@JsonSerializable()
class GetRushListBean {
  int status;
  String msg;
  ResultBean result;

  GetRushListBean();


}

@JsonSerializable()
class ResultBean {
  Map> rush_list;
  String page;
  int p;
  int pageNum;

  ResultBean();

 
}

第三步:自动生成解析方法

输入下面的命令

flutter packages pub run build_runner build

然后你就会看到你的model同目录下生成了.g.文件

第四部:把解析方法复制到你的文件中,让外部可以调用,最后如下

import 'package:json_annotation/json_annotation.dart';
import 'QiangGouItemBean.dart';

part 'GetRushListBean.g.dart';

//flutter packages pub run build_runner build  生成方法
///这个标注是告诉生成器,这个类是需要生成Model类的
@JsonSerializable()
class GetRushListBean {
  int status;
  String msg;
  ResultBean result;

  GetRushListBean();

  factory GetRushListBean.fromJson(Map json) =>
      _$GetRushListBeanFromJson(json);

  Map toJson() => _$GetRushListBeanToJson(this);
}

@JsonSerializable()
class ResultBean {
  Map> rush_list;
  String page;
  int p;
  int pageNum;

  ResultBean();

  factory ResultBean.fromJson(Map json) =>
      _$ResultBeanFromJson(json);

  Map toJson() => _$ResultBeanToJson(this);
}

第四部:实际使用

 HttpClient httpClient = new HttpClient();
    Uri uri = new Uri.http(
        "", '/xx', {'xx': ''});
    var request = await httpClient.getUrl(uri);
    request.headers.add("Content-Type", "application/json");
    var response = await request.close();
    var responseBody = await response.transform(utf8.decoder).join();
    Map resultMap = json.decode(responseBody);
    GetRushListBean getRushListBean = GetRushListBean.fromJson(resultMap);
    print('获取到的json数据' + json.encode(resultMap));
    print('解析到的json数据' + json.encode(getRushListBean));

 

你可能感兴趣的:(Flutter)