如何在FutureBuilder中解析从localhost接收的JSON对象
我在localhost上托管了以下JSON,并试图在FutureBuilder小部件中解析它。我无法使用FutureBuilder小部件解析Json中要显示的数据。我得到的只是“文学数据模型实例”。此外,我无法获取数据快照的长度。我得到的错误是“没有为类型对象定义getter长度” 我使用以下链接为上述Json生成了模型类: 下面是生成的类。我将其修改为使用空安全性。根据JSON的映射对象列表在LiteratureDataModel工厂构造函数中成功打印。因此,数据被成功接收如何在FutureBuilder中解析从localhost接收的JSON对象,json,flutter,http,flutter-futurebuilder,Json,Flutter,Http,Flutter Futurebuilder,我在localhost上托管了以下JSON,并试图在FutureBuilder小部件中解析它。我无法使用FutureBuilder小部件解析Json中要显示的数据。我得到的只是“文学数据模型实例”。此外,我无法获取数据快照的长度。我得到的错误是“没有为类型对象定义getter长度” 我使用以下链接为上述Json生成了模型类: 下面是生成的类。我将其修改为使用空安全性。根据JSON的映射对象列表在LiteratureDataModel工厂构造函数中成功打印。因此,数据被成功接收 class Li
class LiteratureDataModel {
LiteratureDataModel({
this.ultLiteratureDataModel,
});
final List<LiteratureModel>? ultLiteratureDataModel;
factory LiteratureDataModel.fromJson(Map<String, dynamic> json) => LiteratureDataModel(
ultLiteratureDataModel: List<LiteratureModel>.from(json["data"].map((data) {
print(data);
return LiteratureModel.fromJson(data);
})).toList(),
);
Map<String, dynamic> toJson() => {
"data": List<dynamic>.from(ultLiteratureDataModel!.map((data) => data.toJson())),
};
}
class LiteratureModel {
LiteratureModel({
this.authors,
this.edition,
this.id,
this.pubdate,
this.publisher,
this.source,
this.title,
});
final String? authors;
final String? edition;
final int? id;
final String? pubdate;
final String? publisher;
final String? source;
final String? title;
factory LiteratureModel.fromJson(Map<String, dynamic> json) => LiteratureModel(
authors: json["authors"],
edition: json["edition"],
id: json["id"],
pubdate: json["pubdate"],
publisher: json["publisher"],
source: json["source"],
title: json["title"],
);
Map<String, dynamic> toJson() => {
"authors": authors,
"edition": edition,
"id": id,
"pubdate": pubdate,
"publisher": publisher,
"source": source,
"title": title,
};
}
json托管在localhost上,我可以从中成功地提取json。下面是用于从本地主机获取json的类
class LiteratureService {
LiteratureDataModel literatureFromJson(String literature) {
//print(literature);
return LiteratureDataModel.fromJson(json.decode(literature));
}
String literatureToJson(LiteratureDataModel literatureDataModel) => json.encode(literatureDataModel.toJson());
Future fetchLiterature(http.Client client) async {
final response = await client.get(Uri.parse("http://localhost_ip_address:8000/literature/ultliterature.json"));
//print("Http response: ${response.body}");
return literatureFromJson(response.body);
}
}
我参考了以下链接来解决问题,但无法解决:
在上面的链接中,OP面临着与我类似的问题。我遵循了正确答案中建议的更改,但意识到这只是创建工厂构造函数的另一种方法,即LiteratureDataModel类中的方法。此外,我仍然无法获得数据快照的长度
我也提到了下面的链接,它显示了JSON序列化和反序列化的不同方式,但仍然无法解决这个问题
我在代码中做错了什么?关于我的代码所需更正的任何建议都会很有帮助。我通过省略
文学数据模型
类并以以下方式更改获取文学()
函数来解决问题:
Future<List<LiteratureModel>> fetchLiterature(http.Client client) async {
final response =
await client.get(Uri.parse("http://localhost_ip_address:8000/literature/literature.json"));
List<LiteratureModel> literatureModel = List<LiteratureModel>.from(
json.decode(response.body)["data"].map((data) => LiteratureModel.fromJson(data)).toList());
return literatureModel;
}
Future fetch文学(http.Client)异步{
最后答复=
等待client.get(Uri.parse(“http://localhost_ip_address:8000/literature/literature.json"));
List-literatureModel=List.from(
decode(response.body)[“data”].map((data)=>LiteratureModel.fromJson(data)).toList());
回归模型;
}
我还以此为指导对FutureBuilder进行了以下更改
builder:(上下文,异步快照)
如果有人知道如何更好地解决我贴出的问题,请告诉我
class LiteratureService {
LiteratureDataModel literatureFromJson(String literature) {
//print(literature);
return LiteratureDataModel.fromJson(json.decode(literature));
}
String literatureToJson(LiteratureDataModel literatureDataModel) => json.encode(literatureDataModel.toJson());
Future fetchLiterature(http.Client client) async {
final response = await client.get(Uri.parse("http://localhost_ip_address:8000/literature/ultliterature.json"));
//print("Http response: ${response.body}");
return literatureFromJson(response.body);
}
}
Future<List<LiteratureModel>> fetchLiterature(http.Client client) async {
final response =
await client.get(Uri.parse("http://localhost_ip_address:8000/literature/literature.json"));
List<LiteratureModel> literatureModel = List<LiteratureModel>.from(
json.decode(response.body)["data"].map((data) => LiteratureModel.fromJson(data)).toList());
return literatureModel;
}