之前的文章记录了解析简单json的方法、今天遇到复杂的格式、记录作为参考
接口:http://news-at.zhihu.com/api/4/news/latest (知乎开放接口)
数据格式:
json分析: 包含一string字符串两个list,所以要建立两个class分别为top_stories、stories,其中top_stories的images为数组所以要使用 list<String> images这种方式
bean类:
import 'package:json_annotation/json_annotation.dart';
part 'Sydata.g.dart';
@JsonSerializable()
class Sysdata {
final String date;
final List<Staets> stories;
@JsonKey(name: "top_storie")
final List<Topstate> topstories;
Sysdata({this.date,this.stories,this.topstories});
factory Sysdata.fromJson(Map<String,dynamic> parms) =>_$SysdataFromJson(parms);
Map<String,dynamic> toJson() => _$SysdataToJson(this);
}
@JsonSerializable()
class Staets {
List <String> images;
int type;
int id;
@JsonKey(name: "ga_prefix")
String gaprefix;
String title;
Staets({this.images,this.type,this.id,this.gaprefix,this.title});
factory Staets.fromJson(Map<String,dynamic> parms) => _$StaetsFromJson(parms);
Map<String,dynamic> toJson() =>_$StaetsToJson(this);
}
@JsonSerializable()
class Topstate{
String image;
int type;
int id;
@JsonKey(name: "ga_prefix")
String gaprefix;
String title;
Topstate({this.image,this.type,this.id,this.gaprefix,this.title});
factory Topstate.fromJson(Map<String,dynamic> parms) =>_$TopstateFromJson(parms);
Map <String,dynamic> toJson() =>_$TopstateToJson(this);
}
注意dart并不能直接转译 “xx-xx”字符串所以使用 @JsonKey(name:"") 进行包裹
解析方法: