我正在嘗試從本地 RESTful API 中提取資料。我已經通過一個資料收集成功地做到了。現在我正在嘗試一個串列,我遇到了這個問題。
Error: Expected a value of type 'Map<String, dynamic>', but got one of type 'List<dynamic>'
我該如何解決這個問題?
代碼:
JSON模型
import 'dart:convert';
List<ProjectJson> welcomeFromJson(String str) => List<ProjectJson>.from(
json.decode(str).map((x) => ProjectJson.fromJson(x)));
String welcomeToJson(List<ProjectJson> data) =>
json.encode(List<dynamic>.from(data.map((x) => x.toJson())));
class ProjectJson {
ProjectJson({
required this.job,
this.description,
this.deliverTo,
this.promisedDate,
});
String job;
String? description;
String? deliverTo;
DateTime? promisedDate;
factory ProjectJson.fromJson(Map<String, dynamic> json) => ProjectJson(
job: json["job"],
description: json["description"] == null ? null : json["description"],
deliverTo: json["deliver_To"],
promisedDate: DateTime.parse(json["promised_Date"]),
);
Map<String, dynamic> toJson() => {
"job": job,
"description": description == null ? null : description,
"deliver_To": deliverTo,
"promised_Date": promisedDate?.toIso8601String(),
};
}
API 連接
Future<List<ProjectJson>?> OpenProjectCall(
String CustomerID, String APIKey) async {
var headers = {'customer_id': CustomerID, 'APIKey': APIKey};
var request = http.Request(
'GET',
Uri.parse(
'http://65.254.144.50:5114/Customers/{customer_id}/OpenProjects'));
request.headers.addAll(headers);
final response = await request.send();
final String respStr = await response.stream.bytesToString();
if (response.statusCode == 200) {
List<ProjectJson> _project = ProjectJson.fromJson(
jsonDecode(respStr.toString()) as Map<String, dynamic>)
as List<ProjectJson>;
print(_project);
} else {
print(response.reasonPhrase);
}
}
我嘗試將 as Map<String, dynamic> 更改為 Map <,dynamic> 和 Map <dynamic, dynamic> ,但均未成功。在測驗時,我確實通過 API 呼叫和模型對其進行了更改。
預期收益
[
{
"job": "148241",
"description": null,
"deliver_To": "KDC One Northern Labs\t",
"promised_Date": "2022-07-15T00:00:00"
},
{
"job": "148242",
"description": "With PD, SM And SW",
"deliver_To": "KDC One Northern Labs\t",
"promised_Date": "2022-07-15T00:00:00"
}
]
uj5u.com熱心網友回復:
當前,ProjectJson.fromJson建構式期望Map傳入 a ,而您傳入??的是List<Map>.
所以一旦你有了這個String
final String respStr = await response.stream.bytesToString();
您需要將其轉換為 aList才能訪問其中的Maps。
final responseList = json.decode(resStr) as List;
現在您List<Map>需要遍歷并將每個個體傳遞Map給ProjectJson.fromJson建構式。
這是使用 Darts方法的map一種方法。
final projectList = responseList.map((project) => ProjectJson.fromJson(project)).toList(); // projectList is a List<ProjectJson>
下面你看到它給你一個正確初始化的List<ProjectJson

把它還回去,projectList你就可以走了。
uj5u.com熱心網友回復:
改變
Map<String, dynamic>
至
List<dynamic>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/489906.html
