本文共 2102 字,大约阅读时间需要 7 分钟。
在android中可以使用Gson直接对网络请求返回的json进行格式化,首先这种方法是flutter中是不可行的。
在flutter中对于网络请求返回的json,需要自己写方法来解析。可以自己手动来解析,但是当json层级很大的时候,就非常麻烦。
上面的json_serialzable可以实现json和model之间的相互转化。
第一步:导包,两个包
1.上面的json_serializable
2.build_runner ,导入这个时候可能会提示你的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(Mapjson) => _$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));
转载地址:http://nxeci.baihongyu.com/