json_model
json_model copied to clipboard
解析嵌套json数据出现问题
json代码示例
{
"data":[
{
"desc":"Android高级进阶直播课免费学习",
"id":22,
"imagePath":"https://wanandroid.com/blogimgs/fbed8f14-1043-4a43-a7ee-0651996f7c49.jpeg",
"isVisible":1,
"order":0,
"title":"Android高级进阶直播课免费学习",
"type":0,
"url":"https://url.163.com/4bj"
},
{
"desc":"一起来做个App吧",
"id":10,
"imagePath":"https://www.wanandroid.com/blogimgs/50c115c2-cf6c-4802-aa7b-a4334de444cd.png",
"isVisible":1,
"order":2,
"title":"一起来做个App吧",
"type":0,
"url":"http://www.wanandroid.com/blog/show/2"
},
{
"desc":"",
"id":4,
"imagePath":"https://www.wanandroid.com/blogimgs/ab17e8f9-6b79-450b-8079-0f2287eb6f0f.png",
"isVisible":1,
"order":0,
"title":"看看别人的面经,搞定面试~",
"type":1,
"url":"http://www.wanandroid.com/article/list/0?cid=73"
},
{
"desc":"",
"id":3,
"imagePath":"https://www.wanandroid.com/blogimgs/fb0ea461-e00a-482b-814f-4faca5761427.png",
"isVisible":1,
"order":1,
"title":"兄弟,要不要挑个项目学习下?",
"type":1,
"url":"http://www.wanandroid.com/project"
},
{
"desc":"",
"id":6,
"imagePath":"https://www.wanandroid.com/blogimgs/62c1bd68-b5f3-4a3c-a649-7ca8c7dfabe6.png",
"isVisible":1,
"order":1,
"title":"我们新增了一个常用导航Tab~",
"type":1,
"url":"http://www.wanandroid.com/navi"
},
{
"desc":"",
"id":18,
"imagePath":"https://www.wanandroid.com/blogimgs/00f83f1d-3c50-439f-b705-54a49fc3d90d.jpg",
"isVisible":1,
"order":1,
"title":"公众号文章列表强势上线",
"type":1,
"url":"http://www.wanandroid.com/wxarticle/list/408/1"
},
{
"desc":"",
"id":2,
"imagePath":"https://www.wanandroid.com/blogimgs/90cf8c40-9489-4f9d-8936-02c9ebae31f0.png",
"isVisible":1,
"order":2,
"title":"JSON工具",
"type":1,
"url":"http://www.wanandroid.com/tools/bejson"
},
],
"errorCode":0,
"errorMsg":""
}
运行flutter packages pub run json_model生成model示例
import 'package:json_annotation/json_annotation.dart';
part 'banner.g.dart';
@JsonSerializable()
class Banner {
Banner();
List data;
num errorCode;
String errorMsg;
factory Banner.fromJson(Map<String,dynamic> json) => _$BannerFromJson(json);
Map<String, dynamic> toJson() => _$BannerToJson(this);
}
我也碰到这个问题了,有解决方法么?
这个不适用于嵌套的,只能把data里面的类单独拆出来,搞个item.json文件,然后data那里写"data": "$[]item"
这个不适用于嵌套的,只能把data里面的类单独拆出来,搞个item.json文件,然后data那里写
"data": "$[]item"
但是生成的代码不会自动解析 JSON 好像,还得手动修改 *.g.dart 文件才行。比如:
// AuthorModel.dart
@JsonSerializable()
class AuthorModel {
AuthorModel();
String id;
String username;
Url avatarUri;
List<LabelModel> labelStructs;
factory AuthorModel.fromJson(Map<String,dynamic> json) => _$AuthorModelFromJson(json);
Map<String, dynamic> toJson() => _$AuthorModelToJson(this);
}
生成的 AuthorModel.g.dart
AuthorModel _$AuthorModelFromJson(Map<String, dynamic> json) {
return AuthorModel()
..id = json['id'] as String
..username = json['username'] as String
..avatarUri = json['avatarUri']
..labelStructs = json['labelStructs'] as List;
}
Map<String, dynamic> _$AuthorModelToJson(AuthorModel instance) =>
<String, dynamic>{
'id': instance.id,
'username': instance.username,
'avatarUri': instance.avatarUri,
'labelStructs': instance.labelStructs
};
labelStructs 属性不会调用 LabelModel.fromJson 进行解析,而是直接把 JSON 放进来了,这样好像有问题 :(